<?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>121751</bug_id>
          
          <creation_ts>2013-09-21 12:51:07 -0700</creation_ts>
          <short_desc>Event and EventTarget interfaces don&apos;t need to be store as AtomicStrings</short_desc>
          <delta_ts>2013-09-24 11:37:22 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>philn</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931802</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 12:51:07 -0700</bug_when>
    <thetext>Event and EventTarget interfaces don&apos;t need to be store as AtomicStrings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931803</commentid>
    <comment_count>1</comment_count>
      <attachid>212279</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 12:55:21 -0700</bug_when>
    <thetext>Created attachment 212279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931805</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-21 12:56:52 -0700</bug_when>
    <thetext>Attachment 212279 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.h&apos;, u&apos;Source/WebCore/Modules/filesystem/FileWriter.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabase.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBRequest.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransaction.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.h&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.cpp&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisEvent.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.h&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/CloseEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.cpp&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.h&apos;, u&apos;Source/WebCore/bindings/js/JSErrorHandler.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventTargetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/objc/DOMEvents.mm&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.cpp&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.h&apos;, u&apos;Source/WebCore/css/FontLoader.h&apos;, u&apos;Source/WebCore/dom/BeforeLoadEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.cpp&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeUnloadEvent.h&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.h&apos;, u&apos;Source/WebCore/dom/CompositionEvent.cpp&apos;, u&apos;Source/WebCore/dom/CompositionEvent.h&apos;, u&apos;Source/WebCore/dom/CustomEvent.cpp&apos;, u&apos;Source/WebCore/dom/CustomEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.h&apos;, u&apos;Source/WebCore/dom/ErrorEvent.cpp&apos;, u&apos;Source/WebCore/dom/ErrorEvent.h&apos;, u&apos;Source/WebCore/dom/Event.cpp&apos;, u&apos;Source/WebCore/dom/Event.h&apos;, u&apos;Source/WebCore/dom/EventNames.cpp&apos;, u&apos;Source/WebCore/dom/EventNames.h&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/FocusEvent.cpp&apos;, u&apos;Source/WebCore/dom/FocusEvent.h&apos;, u&apos;Source/WebCore/dom/GestureEvent.cpp&apos;, u&apos;Source/WebCore/dom/GestureEvent.h&apos;, u&apos;Source/WebCore/dom/HashChangeEvent.h&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.h&apos;, u&apos;Source/WebCore/dom/MessageEvent.cpp&apos;, u&apos;Source/WebCore/dom/MessageEvent.h&apos;, u&apos;Source/WebCore/dom/MessagePort.cpp&apos;, u&apos;Source/WebCore/dom/MessagePort.h&apos;, u&apos;Source/WebCore/dom/MouseEvent.cpp&apos;, u&apos;Source/WebCore/dom/MouseEvent.h&apos;, u&apos;Source/WebCore/dom/MutationEvent.cpp&apos;, u&apos;Source/WebCore/dom/MutationEvent.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/OverflowEvent.cpp&apos;, u&apos;Source/WebCore/dom/OverflowEvent.h&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/PopStateEvent.cpp&apos;, u&apos;Source/WebCore/dom/PopStateEvent.h&apos;, u&apos;Source/WebCore/dom/ProgressEvent.cpp&apos;, u&apos;Source/WebCore/dom/ProgressEvent.h&apos;, u&apos;Source/WebCore/dom/SecurityPolicyViolationEvent.h&apos;, u&apos;Source/WebCore/dom/TextEvent.cpp&apos;, u&apos;Source/WebCore/dom/TextEvent.h&apos;, u&apos;Source/WebCore/dom/TransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/TransitionEvent.h&apos;, u&apos;Source/WebCore/dom/UIEvent.cpp&apos;, u&apos;Source/WebCore/dom/UIEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.cpp&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.h&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/WheelEvent.cpp&apos;, u&apos;Source/WebCore/dom/WheelEvent.h&apos;, u&apos;Source/WebCore/fileapi/FileReader.cpp&apos;, u&apos;Source/WebCore/fileapi/FileReader.h&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.cpp&apos;, u&apos;Source/WebCore/html/MediaController.cpp&apos;, u&apos;Source/WebCore/html/MediaController.h&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.cpp&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.h&apos;, u&apos;Source/WebCore/html/TextFieldInputType.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.h&apos;, u&apos;Source/WebCore/html/shadow/MediaControlsApple.cpp&apos;, u&apos;Source/WebCore/html/shadow/SpinButtonElement.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.h&apos;, u&apos;Source/WebCore/html/track/TextTrack.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrack.h&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.h&apos;, u&apos;Source/WebCore/html/track/TextTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackList.h&apos;, u&apos;Source/WebCore/html/track/TrackEvent.cpp&apos;, u&apos;Source/WebCore/html/track/TrackEvent.h&apos;, u&apos;Source/WebCore/html/track/TrackListBase.h&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.h&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.cpp&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.h&apos;, u&apos;Source/WebCore/page/DOMWindow.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.h&apos;, u&apos;Source/WebCore/page/EventSource.cpp&apos;, u&apos;Source/WebCore/page/EventSource.h&apos;, u&apos;Source/WebCore/page/Performance.cpp&apos;, u&apos;Source/WebCore/page/Performance.h&apos;, u&apos;Source/WebCore/page/SpeechInputEvent.h&apos;, u&apos;Source/WebCore/storage/StorageEvent.cpp&apos;, u&apos;Source/WebCore/storage/StorageEvent.h&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.cpp&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.h&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.cpp&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.h&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/SharedWorker.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorker.h&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/Worker.cpp&apos;, u&apos;Source/WebCore/workers/Worker.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestProgressEvent.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.h&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventTarget.h:105:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventTarget.h:107:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/ChangeLog:11:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/dom/EventNames.h:277:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventNames.h:279:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Total errors found: 5 in 182 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>931806</commentid>
    <comment_count>3</comment_count>
      <attachid>212279</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-21 12:58:18 -0700</bug_when>
    <thetext>Comment on attachment 212279
Patch

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

r=me

&gt; Source/WebCore/dom/EventNames.h:305
&gt; +        names.reserveCapacity(4);
&gt; +        names.append(touchstartEvent);
&gt; +        names.append(touchmoveEvent);
&gt; +        names.append(touchendEvent);
&gt; +        names.append(touchcancelEvent);

Since you are touching these lines, you might as well make it reserveInitialCapacity() and uncheckedAppend().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931810</commentid>
    <comment_count>4</comment_count>
      <attachid>212279</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-21 13:04:47 -0700</bug_when>
    <thetext>Comment on attachment 212279
Patch

Attachment 212279 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/2011083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931811</commentid>
    <comment_count>5</comment_count>
      <attachid>212279</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-21 13:05:14 -0700</bug_when>
    <thetext>Comment on attachment 212279
Patch

Attachment 212279 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/2011082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931815</commentid>
    <comment_count>6</comment_count>
      <attachid>212279</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-21 13:20:13 -0700</bug_when>
    <thetext>Comment on attachment 212279
Patch

Attachment 212279 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1967321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931817</commentid>
    <comment_count>7</comment_count>
      <attachid>212279</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-21 13:27:02 -0700</bug_when>
    <thetext>Comment on attachment 212279
Patch

Attachment 212279 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1803426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931818</commentid>
    <comment_count>8</comment_count>
      <attachid>212282</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 13:31:20 -0700</bug_when>
    <thetext>Created attachment 212282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931821</commentid>
    <comment_count>9</comment_count>
      <attachid>212283</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 13:44:35 -0700</bug_when>
    <thetext>Created attachment 212283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931823</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-21 13:47:33 -0700</bug_when>
    <thetext>Attachment 212283 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/battery/BatteryManager.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.h&apos;, u&apos;Source/WebCore/Modules/filesystem/FileWriter.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabase.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBRequest.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransaction.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.h&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.cpp&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisEvent.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.h&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/CloseEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.cpp&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.h&apos;, u&apos;Source/WebCore/bindings/js/JSErrorHandler.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventTargetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/objc/DOMEvents.mm&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.cpp&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.h&apos;, u&apos;Source/WebCore/css/FontLoader.h&apos;, u&apos;Source/WebCore/dom/BeforeLoadEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.cpp&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeUnloadEvent.h&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.h&apos;, u&apos;Source/WebCore/dom/CompositionEvent.cpp&apos;, u&apos;Source/WebCore/dom/CompositionEvent.h&apos;, u&apos;Source/WebCore/dom/CustomEvent.cpp&apos;, u&apos;Source/WebCore/dom/CustomEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.h&apos;, u&apos;Source/WebCore/dom/ErrorEvent.cpp&apos;, u&apos;Source/WebCore/dom/ErrorEvent.h&apos;, u&apos;Source/WebCore/dom/Event.cpp&apos;, u&apos;Source/WebCore/dom/Event.h&apos;, u&apos;Source/WebCore/dom/EventNames.cpp&apos;, u&apos;Source/WebCore/dom/EventNames.h&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/FocusEvent.cpp&apos;, u&apos;Source/WebCore/dom/FocusEvent.h&apos;, u&apos;Source/WebCore/dom/GestureEvent.cpp&apos;, u&apos;Source/WebCore/dom/GestureEvent.h&apos;, u&apos;Source/WebCore/dom/HashChangeEvent.h&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.h&apos;, u&apos;Source/WebCore/dom/MessageEvent.cpp&apos;, u&apos;Source/WebCore/dom/MessageEvent.h&apos;, u&apos;Source/WebCore/dom/MessagePort.cpp&apos;, u&apos;Source/WebCore/dom/MessagePort.h&apos;, u&apos;Source/WebCore/dom/MouseEvent.cpp&apos;, u&apos;Source/WebCore/dom/MouseEvent.h&apos;, u&apos;Source/WebCore/dom/MutationEvent.cpp&apos;, u&apos;Source/WebCore/dom/MutationEvent.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/OverflowEvent.cpp&apos;, u&apos;Source/WebCore/dom/OverflowEvent.h&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/PopStateEvent.cpp&apos;, u&apos;Source/WebCore/dom/PopStateEvent.h&apos;, u&apos;Source/WebCore/dom/ProgressEvent.cpp&apos;, u&apos;Source/WebCore/dom/ProgressEvent.h&apos;, u&apos;Source/WebCore/dom/SecurityPolicyViolationEvent.h&apos;, u&apos;Source/WebCore/dom/TextEvent.cpp&apos;, u&apos;Source/WebCore/dom/TextEvent.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/TransitionEvent.h&apos;, u&apos;Source/WebCore/dom/UIEvent.cpp&apos;, u&apos;Source/WebCore/dom/UIEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.cpp&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.h&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/WheelEvent.cpp&apos;, u&apos;Source/WebCore/dom/WheelEvent.h&apos;, u&apos;Source/WebCore/fileapi/FileReader.cpp&apos;, u&apos;Source/WebCore/fileapi/FileReader.h&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.cpp&apos;, u&apos;Source/WebCore/html/MediaController.cpp&apos;, u&apos;Source/WebCore/html/MediaController.h&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.cpp&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.h&apos;, u&apos;Source/WebCore/html/TextFieldInputType.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.h&apos;, u&apos;Source/WebCore/html/shadow/MediaControlsApple.cpp&apos;, u&apos;Source/WebCore/html/shadow/SpinButtonElement.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.h&apos;, u&apos;Source/WebCore/html/track/TextTrack.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrack.h&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.h&apos;, u&apos;Source/WebCore/html/track/TextTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackList.h&apos;, u&apos;Source/WebCore/html/track/TrackEvent.cpp&apos;, u&apos;Source/WebCore/html/track/TrackEvent.h&apos;, u&apos;Source/WebCore/html/track/TrackListBase.h&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.h&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.cpp&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.h&apos;, u&apos;Source/WebCore/page/DOMWindow.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.h&apos;, u&apos;Source/WebCore/page/EventSource.cpp&apos;, u&apos;Source/WebCore/page/EventSource.h&apos;, u&apos;Source/WebCore/page/Performance.cpp&apos;, u&apos;Source/WebCore/page/Performance.h&apos;, u&apos;Source/WebCore/page/SpeechInputEvent.h&apos;, u&apos;Source/WebCore/storage/StorageEvent.cpp&apos;, u&apos;Source/WebCore/storage/StorageEvent.h&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.cpp&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.h&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.cpp&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.h&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/SharedWorker.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorker.h&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/Worker.cpp&apos;, u&apos;Source/WebCore/workers/Worker.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestProgressEvent.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.h&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventTarget.h:105:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventTarget.h:107:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/ChangeLog:11:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/dom/EventNames.h:277:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventNames.h:279:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Total errors found: 5 in 185 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>931828</commentid>
    <comment_count>11</comment_count>
      <attachid>212283</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-21 14:23:48 -0700</bug_when>
    <thetext>Comment on attachment 212283
Patch

Attachment 212283 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1966376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931829</commentid>
    <comment_count>12</comment_count>
      <attachid>212283</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-21 15:06:41 -0700</bug_when>
    <thetext>Comment on attachment 212283
Patch

Attachment 212283 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/2011106</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931830</commentid>
    <comment_count>13</comment_count>
      <attachid>212286</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 15:14:22 -0700</bug_when>
    <thetext>Created attachment 212286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931831</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-21 15:15:50 -0700</bug_when>
    <thetext>Attachment 212286 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/battery/BatteryManager.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.h&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp&apos;, u&apos;Source/WebCore/Modules/encryptedmedia/MediaKeySession.h&apos;, u&apos;Source/WebCore/Modules/filesystem/FileWriter.cpp&apos;, u&apos;Source/WebCore/Modules/filesystem/FileWriter.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabase.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabase.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBRequest.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBRequest.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransaction.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransaction.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.cpp&apos;, u&apos;Source/WebCore/Modules/indieui/UIRequestEvent.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBuffer.h&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/SourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitMediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/WebKitSourceBufferList.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrackEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFSender.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDTMFToneChangeEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannel.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.h&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/RTCPeerConnection.h&apos;, u&apos;Source/WebCore/Modules/networkinfo/NetworkInfoConnection.cpp&apos;, u&apos;Source/WebCore/Modules/networkinfo/NetworkInfoConnection.h&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.cpp&apos;, u&apos;Source/WebCore/Modules/notifications/Notification.h&apos;, u&apos;Source/WebCore/Modules/proximity/DeviceProximityEvent.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognition.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognition.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognitionError.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognitionError.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechRecognitionEvent.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisEvent.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioNode.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioProcessingEvent.h&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/CloseEvent.h&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.cpp&apos;, u&apos;Source/WebCore/Modules/websockets/WebSocket.h&apos;, u&apos;Source/WebCore/bindings/js/JSErrorHandler.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventTargetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/objc/DOMEvents.mm&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.cpp&apos;, u&apos;Source/WebCore/css/CSSFontFaceLoadEvent.h&apos;, u&apos;Source/WebCore/css/FontLoader.cpp&apos;, u&apos;Source/WebCore/css/FontLoader.h&apos;, u&apos;Source/WebCore/dom/BeforeLoadEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.cpp&apos;, u&apos;Source/WebCore/dom/BeforeTextInsertedEvent.h&apos;, u&apos;Source/WebCore/dom/BeforeUnloadEvent.h&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/ClipboardEvent.h&apos;, u&apos;Source/WebCore/dom/CompositionEvent.cpp&apos;, u&apos;Source/WebCore/dom/CompositionEvent.h&apos;, u&apos;Source/WebCore/dom/CustomEvent.cpp&apos;, u&apos;Source/WebCore/dom/CustomEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceMotionEvent.h&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.cpp&apos;, u&apos;Source/WebCore/dom/DeviceOrientationEvent.h&apos;, u&apos;Source/WebCore/dom/ErrorEvent.cpp&apos;, u&apos;Source/WebCore/dom/ErrorEvent.h&apos;, u&apos;Source/WebCore/dom/Event.cpp&apos;, u&apos;Source/WebCore/dom/Event.h&apos;, u&apos;Source/WebCore/dom/EventNames.cpp&apos;, u&apos;Source/WebCore/dom/EventNames.h&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/FocusEvent.cpp&apos;, u&apos;Source/WebCore/dom/FocusEvent.h&apos;, u&apos;Source/WebCore/dom/GestureEvent.cpp&apos;, u&apos;Source/WebCore/dom/GestureEvent.h&apos;, u&apos;Source/WebCore/dom/HashChangeEvent.h&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.cpp&apos;, u&apos;Source/WebCore/dom/KeyboardEvent.h&apos;, u&apos;Source/WebCore/dom/MessageEvent.cpp&apos;, u&apos;Source/WebCore/dom/MessageEvent.h&apos;, u&apos;Source/WebCore/dom/MessagePort.cpp&apos;, u&apos;Source/WebCore/dom/MessagePort.h&apos;, u&apos;Source/WebCore/dom/MouseEvent.cpp&apos;, u&apos;Source/WebCore/dom/MouseEvent.h&apos;, u&apos;Source/WebCore/dom/MutationEvent.cpp&apos;, u&apos;Source/WebCore/dom/MutationEvent.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/OverflowEvent.cpp&apos;, u&apos;Source/WebCore/dom/OverflowEvent.h&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/PageTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/PopStateEvent.cpp&apos;, u&apos;Source/WebCore/dom/PopStateEvent.h&apos;, u&apos;Source/WebCore/dom/ProgressEvent.cpp&apos;, u&apos;Source/WebCore/dom/ProgressEvent.h&apos;, u&apos;Source/WebCore/dom/SecurityPolicyViolationEvent.h&apos;, u&apos;Source/WebCore/dom/TextEvent.cpp&apos;, u&apos;Source/WebCore/dom/TextEvent.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/TransitionEvent.h&apos;, u&apos;Source/WebCore/dom/UIEvent.cpp&apos;, u&apos;Source/WebCore/dom/UIEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitAnimationEvent.h&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.cpp&apos;, u&apos;Source/WebCore/dom/WebKitNamedFlow.h&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.cpp&apos;, u&apos;Source/WebCore/dom/WebKitTransitionEvent.h&apos;, u&apos;Source/WebCore/dom/WheelEvent.cpp&apos;, u&apos;Source/WebCore/dom/WheelEvent.h&apos;, u&apos;Source/WebCore/fileapi/FileReader.cpp&apos;, u&apos;Source/WebCore/fileapi/FileReader.h&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.cpp&apos;, u&apos;Source/WebCore/html/MediaController.cpp&apos;, u&apos;Source/WebCore/html/MediaController.h&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.cpp&apos;, u&apos;Source/WebCore/html/MediaKeyEvent.h&apos;, u&apos;Source/WebCore/html/TextFieldInputType.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLContextEvent.h&apos;, u&apos;Source/WebCore/html/shadow/MediaControlsApple.cpp&apos;, u&apos;Source/WebCore/html/shadow/SpinButtonElement.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/AudioTrackList.h&apos;, u&apos;Source/WebCore/html/track/TextTrack.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrack.h&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.h&apos;, u&apos;Source/WebCore/html/track/TextTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackList.h&apos;, u&apos;Source/WebCore/html/track/TrackEvent.cpp&apos;, u&apos;Source/WebCore/html/track/TrackEvent.h&apos;, u&apos;Source/WebCore/html/track/TrackListBase.h&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.cpp&apos;, u&apos;Source/WebCore/html/track/VideoTrackList.h&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.cpp&apos;, u&apos;Source/WebCore/loader/appcache/DOMApplicationCache.h&apos;, u&apos;Source/WebCore/page/DOMWindow.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.h&apos;, u&apos;Source/WebCore/page/EventSource.cpp&apos;, u&apos;Source/WebCore/page/EventSource.h&apos;, u&apos;Source/WebCore/page/Performance.cpp&apos;, u&apos;Source/WebCore/page/Performance.h&apos;, u&apos;Source/WebCore/page/SpeechInputEvent.cpp&apos;, u&apos;Source/WebCore/page/SpeechInputEvent.h&apos;, u&apos;Source/WebCore/storage/StorageEvent.cpp&apos;, u&apos;Source/WebCore/storage/StorageEvent.h&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.cpp&apos;, u&apos;Source/WebCore/svg/SVGElementInstance.h&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.cpp&apos;, u&apos;Source/WebCore/svg/SVGZoomEvent.h&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/DedicatedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/SharedWorker.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorker.h&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/SharedWorkerGlobalScope.h&apos;, u&apos;Source/WebCore/workers/Worker.cpp&apos;, u&apos;Source/WebCore/workers/Worker.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestProgressEvent.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequestUpload.h&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventTarget.h:105:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventTarget.h:107:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/ChangeLog:11:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/dom/EventNames.h:277:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/dom/EventNames.h:279:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Total errors found: 5 in 202 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>931834</commentid>
    <comment_count>15</comment_count>
      <attachid>212286</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-21 15:46:46 -0700</bug_when>
    <thetext>Comment on attachment 212286
Patch

Attachment 212286 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1967355</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931856</commentid>
    <comment_count>16</comment_count>
      <attachid>212286</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-21 20:00:22 -0700</bug_when>
    <thetext>Comment on attachment 212286
Patch

Attachment 212286 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/1828316</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931923</commentid>
    <comment_count>17</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-09-22 13:59:25 -0700</bug_when>
    <thetext>This broke the Windows builders: http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/52511</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932640</commentid>
    <comment_count>18</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-24 11:35:26 -0700</bug_when>
    <thetext>The patch for this bug was committed in &lt;http://trac.webkit.org/changeset/156241&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932641</commentid>
    <comment_count>19</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-24 11:37:22 -0700</bug_when>
    <thetext>Build fixes were committed in:

&lt;http://trac.webkit.org/changeset/156248&gt;
&lt;http://trac.webkit.org/changeset/156249&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212279</attachid>
            <date>2013-09-21 12:55:21 -0700</date>
            <delta_ts>2013-09-21 13:31:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121751-20130921125519.patch</filename>
            <type>text/plain</type>
            <size>121179</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRXZlbnQgYW5kIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZXMgZG9uJ3QgbmVlZCB0byBiZSBzdG9yZSBhcyBBdG9taWNTdHJpbmdzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb252ZXJ0IHRoZSBFdmVu
dCBhbmQgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIGZyb20gQXRvbWljU3RyaW5n
cyB0byBlbnVtcy4gVGhleQorICAgICAgICBhcmUgbm90IGV4dGVuc2libGUgYW5kIG5vdCBleHBv
c2VkIGFzIFN0cmluZ3MgYW55d2hlcmUuCisKKyAgICAgICAgKiBGaWxlcyBlbGlkZWQgKgorCiAy
MDEzLTA5LTIxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBE
b24ndCBibG9hdCBPYmotQyBiaW5kaW5ncyB3aXRoIGlubGluZWQgYXR0cmlidXRlIHJldHJpZXZh
bC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5j
cnlwdGVkbWVkaWEvTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCBNZWRpYUtleU1lc3NhZ2VF
dmVudDo6fk1lZGlhS2V5TWVzc2FnZUV2CiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVk
aWFLZXlNZXNzYWdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2Ug
TWVkaWFLZXlNZXNzYWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhS2V5TWVzc2FnZUV2ZW50OworICAgIHJl
dHVybiBNZWRpYUtleU1lc3NhZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
TWVkaWFLZXlNZXNzYWdlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlNZXNz
YWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFLZXlNZXNzYWdlRXZlbnQodHlwZSwgaW5pdGlh
bGl6ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZl
bnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAgIFVpbnQ4QXJyYXkqIG1lc3NhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2UuZ2V0KCk7IH0KICAgICBTdHJpbmcgZGVzdGluYXRp
b25VUkwoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uVVJMOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlOZWVkZWRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlOZWVkZWRFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDkgKzUyLDkgQEAgTWVkaWFLZXlOZWVkZWRFdmVudDo6fk1lZGlhS2V5TmVlZGVk
RXZlbgogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5TmVlZGVkRXZlbnQ6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgTWVkaWFLZXlOZWVkZWRFdmVudDo6
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yTWVkaWFLZXlOZWVkZWRFdmVudDsKKyAgICByZXR1cm4gTWVkaWFLZXlOZWVkZWRFdmVu
dEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlOZWVkZWRFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlOZWVkZWRFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVk
aWFLZXlOZWVkZWRFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURF
OwogCiAgICAgVWludDhBcnJheSogaW5pdERhdGEoKSBjb25zdCB7IHJldHVybiBtX2luaXREYXRh
LmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
TWVkaWFLZXlTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDkgKzIxOSw5IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9u
OjphZGRLZXlUaW1lckZpcmVkKFQKICAgICB9CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVk
aWFLZXlTZXNzaW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IE1lZGlhS2V5U2Vzc2lvbjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJl
dHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFLZXlTZXNzaW9uOworICAgIHJldHVy
biBNZWRpYUtleVNlc3Npb25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIE1lZGlhS2V5U2Vzc2lvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlh
S2V5U2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIod2Via2l0a2V5ZXJyb3IpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIod2Via2l0a2V5bWVzc2FnZSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCBPVkVSUklERTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZhaWwoRmlsZUVycm9y
OjpFcnJvckNvZGUpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCiAgICAg
dXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT46OnJlZjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gRXZlbnRUYXJnZXQK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNDbG9zZVBlbmRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2Nsb3NlUGVuZGluZzsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpOwogCiAgICAgLy8gRXZlbnRUYXJn
ZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2
ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklE
QlZlcnNpb25DaGFuZ2UKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgSURCVmVyc2lv
bkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdlRXZlbnQ7CisgICAgcmV0dXJuIElE
QlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkFueT4gb2xkVmVyc2lvbigpIHsgcmV0dXJuIG1fb2xkVmVyc2lvbjsgfQogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJBbnk+IG5ld1ZlcnNpb24oKSB7IHJldHVybiBtX25ld1ZlcnNpb247
IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIElEQlZlcnNpb25DaGFuZ2VFdmVudChQYXNzUmVmUHRyPElEQkFueT4g
b2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJBbnk+IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kaWV1aS9V
SVJlcXVlc3RFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRpZXVpL1VJUmVxdWVzdEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQsOSArNzQsOSBAQCBVSVJlcXVlc3RFdmVudDo6flVJUmVxdWVzdEV2ZW50KCkKIHsKIH0K
ICAgICAKLWNvbnN0IEF0b21pY1N0cmluZyYgVUlSZXF1ZXN0RXZlbnQ6OmludGVyZmFjZU5hbWUo
KSBjb25zdAorRXZlbnRJbnRlcmZhY2UgVUlSZXF1ZXN0RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclVJUmVxdWVzdEV2
ZW50OworICAgIHJldHVybiBVSVJlcXVlc3RFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIFVJUmVx
dWVzdEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6VUlSZXF1ZXN0RXZlbnREaXNwYXRjaE1lZGlhdG9y
KFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+IGV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kaWV1aS9VSVJlcXVlc3RFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBVSVJlcXVl
c3RFdmVudCgpOwogICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgCiBwcml2YXRlOgogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9y
ZWNlaXZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3
LDkgKzIwNyw5IEBAIGJvb2wgTWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZChjb25zdCAKICAg
ICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRNZWRpYVNvdXJjZU1JTUVUeXBl
KGNvbnRlbnRUeXBlLnR5cGUoKSwgY29kZWNzKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBN
ZWRpYVNvdXJjZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBN
ZWRpYVNvdXJjZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFTb3VyY2U7CisgICAgcmV0dXJuIE1lZGlhU291
cmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGlzVHlwZVN1cHBvcnRlZChjb25zdCBTdHJpbmcmIHR5cGUp
OwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7
CiAKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OnJlZjsKICAgICB1c2lu
ZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsOSArMjE0LDkgQEAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogU291cmNlQnVmZmVyOjpzYwogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTb3Vy
Y2VCdWZmZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgU291
cmNlQnVmZmVyOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJuIFNvdXJjZUJ1
ZmZlckV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBTb3Vy
Y2VCdWZmZXI6OmV2ZW50VGFyZ2V0RGF0YSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAgLy8gRXZlbnRUYXJnZXQg
aW50ZXJmYWNlCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICB1c2luZyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlcj46OnJlZjsKICAgICB1c2luZyBSZWZD
b3VudGVkPFNvdXJjZUJ1ZmZlcj46OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw5ICs3OCw5IEBAIHZvaWQgU291cmNl
QnVmZmVyTGlzdDo6c2NoZWR1bGVFdmVudChjb24KICAgICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1
ZXVlRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTb3Vy
Y2VCdWZmZXJMaXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IFNvdXJjZUJ1ZmZlckxpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNvdXJjZUJ1ZmZlckxpc3Q7CisgICAgcmV0
dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIFNvdXJjZUJ1ZmZlckxpc3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAv
LyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8U291cmNlQnVmZmVyTGlzdD46OnJl
ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvV2ViS2l0TWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlhU291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIGJvb2wgV2ViS2l0TWVkaWFTb3VyY2U6OmlzVHlwZVN1
cHBvcnRlZCgKICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRNZWRpYVNv
dXJjZU1JTUVUeXBlKGNvbnRlbnRUeXBlLnR5cGUoKSwgY29kZWNzKTsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBXZWJLaXRNZWRpYVNvdXJjZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dFRhcmdldEludGVyZmFjZSBXZWJLaXRNZWRpYVNvdXJjZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViS2l0TWVk
aWFTb3VyY2U7CisgICAgcmV0dXJuIFdlYktpdE1lZGlhU291cmNlRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlhU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRNZWRpYVNvdXJjZS5oCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dl
YktpdE1lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGlzVHlwZVN1cHBvcnRlZChjb25zdCBTdHJpbmcmIHR5cGUpOwog
CiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OnJlZjsKICAgICB1c2luZyBS
ZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZl
ckxpc3QuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw5ICs5Myw5IEBAIHZvaWQgV2ViS2l0U291cmNlQnVmZmVyTGlzdDo6Y3JlYXRlQW5kRmkKICAg
ICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBXZWJLaXRTb3VyY2VCdWZmZXJMaXN0OjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3Q6OmV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvcldlYktpdFNvdXJjZUJ1ZmZlckxpc3Q7CisgICAgcmV0dXJuIFdlYktpdFNvdXJj
ZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRT
b3VyY2VCdWZmZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmgJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0U291cmNlQnVmZmVyTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyKCk7CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0
U291cmNlQnVmZmVyTGlzdD46OnJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU3LDkgKzI1Nyw5IEBAIHZvaWQgTWVkaWFTdHJlYW06OmNvbnRleHREZXN0
cm95ZWQoKQogICAgIG1fc3RvcHBlZCA9IHRydWU7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFTdHJlYW06OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
TWVkaWFTdHJlYW06OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhU3RyZWFtOworICAgIHJldHVybiBNZWRpYVN0
cmVhbUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogTWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2Ny
aXB0b3IuZ2V0KCk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU3Ry
ZWFtPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIE1lZGlhU3RyZWFtKiBNZWRpYVN0cmVhbUV2ZW50
OjpzdHJlYW0oKSAKICAgICByZXR1cm4gbV9zdHJlYW0uZ2V0KCk7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFTdHJlYW1FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudElu
dGVyZmFjZSBNZWRpYVN0cmVhbUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYVN0cmVhbUV2ZW50OworICAgIHJl
dHVybiBNZWRpYVN0cmVhbUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1FdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIE1lZGlhU3RyZWFtKiBzdHJlYW0oKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNw
cAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3NCw5IEBA
IHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c3RvcCgpCiAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKIH0K
IAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIE1lZGlhU3RyZWFtVHJhY2s6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ck1lZGlhU3RyZWFtVHJhY2s7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tFdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lZGlhU3RyZWFt
VHJhY2s6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmgJKHJl
dmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGVuZGVkKCkgY29uc3Q7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2tFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAgTWVkaWFTdHJlYW1UcmFjayogTWVk
aWFTdHJlYW1UcmFja0V2ZW50OgogICAgIHJldHVybiBtX3RyYWNrLmdldCgpOwogfQogCi1jb25z
dCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0CitFdmVudEludGVyZmFjZSBNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6OmV2ZW50SW50ZXJmYWNl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhU3Ry
ZWFtVHJhY2tFdmVudDsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1UcmFja0V2ZW50SW50ZXJmYWNl
VHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVu
dC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKICAgICBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaygpIGNvbnN0OwogCiAgICAg
Ly8gRXZlbnQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbVRyYWNrRXZl
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNl
bmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENEVE1GU2VuZGVyLmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI4LDkgKzEyOCw5IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6ZGlkUGxheVRvbmUoY29uc3QgU3QK
ICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDo6Y3JlYXRl
KHRvbmUpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBSVENEVE1GU2VuZGVyOjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFJUQ0RUTUZTZW5kZXI6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclJUQ0RUTUZTZW5kZXI7CisgICAgcmV0dXJuIFJUQ0RUTUZTZW5kZXJFdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFJUQ0RUTUZTZW5k
ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmgJKHJldmlzaW9uIDE1
NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRvbmVjaGFuZ2UpOwogCiAgICAgLy8gRXZlbnRUYXJn
ZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJ
bnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8v
IEFjdGl2ZURPTU9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENEVE1GVG9uZUNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdlRXZlbnQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZU
b25lQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw5IEBAIGNvbnN0
IFN0cmluZyYgUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDo6dG8KICAgICByZXR1cm4gbV90b25lOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDsKKyAgICByZXR1cm4gUlRDRFRNRlRvbmVDaGFuZ2VF
dmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlRvbmVDaGFuZ2VFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRN
RlRvbmVDaGFuZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdlRXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIHRvbmUoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDkgKzI4NSw5IEBA
IHZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZERldGVjdEVycm9yKCkKICAgICBzY2hlZHVsZURpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDRGF0YUNoYW5uZWw6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgUlRDRGF0YUNoYW5uZWw6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclJUQ0RhdGFDaGFubmVsOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50VGFy
Z2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUlRDRGF0YUNo
YW5uZWw6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRh
Q2hhbm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0b3AoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFJUQ0RhdGFDaGFu
bmVsPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENE
YXRhQ2hhbm5lbEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIFJUQ0RhdGFDaGFubmVsKiBSVENE
YXRhQ2hhbm5lbEV2ZW50OjpjaGEKICAgICByZXR1cm4gbV9jaGFubmVsLmdldCgpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBj
b25zdAorRXZlbnRJbnRlcmZhY2UgUlRDRGF0YUNoYW5uZWxFdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDRGF0YUNo
YW5uZWxFdmVudDsKKyAgICByZXR1cm4gUlRDRGF0YUNoYW5uZWxFdmVudEludGVyZmFjZVR5cGU7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWxFdmVudC5oCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0Rh
dGFDaGFubmVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6
CiAKICAgICBSVENEYXRhQ2hhbm5lbCogY2hhbm5lbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2
ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUlRD
RGF0YUNoYW5uZWxFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGVFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVFdmVudC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIFJUQ0ljZUNh
bmRpZGF0ZSogUlRDSWNlQ2FuZGlkYXRlRXZlbnQ6OmMKICAgICByZXR1cm4gbV9jYW5kaWRhdGUu
Z2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDSWNlQ2FuZGlkYXRlRXZlbnQ6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUlRDSWNlQ2FuZGlkYXRlRXZlbnQ6
OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclJUQ0ljZUNhbmRpZGF0ZUV2ZW50OworICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVF
dmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICBSVENJY2VDYW5kaWRhdGUqIGNhbmRpZGF0ZSgp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlRXZlbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg1LDkg
KzU4NSw5IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRpZEFkZFJlbW90ZURhdGEKICAgICBz
Y2hlZHVsZURpc3BhdGNoRXZlbnQoUlRDRGF0YUNoYW5uZWxFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5kYXRhY2hhbm5lbEV2ZW50LCBmYWxzZSwgZmFsc2UsIGNoYW5uZWwucmVsZWFzZSgpKSk7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDUGVlckNvbm5lY3Rpb246OmludGVyZmFjZU5h
bWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgUlRDUGVlckNvbm5lY3Rpb246OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclJUQ1BlZXJDb25uZWN0aW9uOworICAgIHJldHVybiBSVENQZWVyQ29ubmVjdGlvbkV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUlRD
UGVlckNvbm5lY3Rpb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIw
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVEYXRhQ2hhbm5lbChQ
YXNzT3duUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4pIE9WRVJSSURFOwogCiAgICAgLy8gRXZl
bnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAog
ICAgIC8vIEFjdGl2ZURPTU9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOSArMTMwLDkgQEAgUGFzc1JlZlB0cjxOb3RpZmljYXRp
b24+IE5vdGlmaWNhdGlvbjo6YwogfQogI2VuZGlmCiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTm90
aWZpY2F0aW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIE5v
dGlmaWNhdGlvbjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTm90aWZpY2F0aW9uOworICAgIHJldHVybiBOb3RpZmlj
YXRpb25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uOjpz
aG93KCkgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxOb3RpZmljYXRpb24+
OjpkZXJlZjsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVu
dFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAK
ICAgICB2b2lkIHN0b3BMb2FkaW5nSWNvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVudC5oCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBl
bGFwc2VkVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxhcHNlZFRpbWU7IH0KICAgICBjb25zdCBT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JTcGVlY2hTeW50aGVzaXNFdmVudDsgfQorICAgIHZpcnR1YWwg
RXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBTcGVlY2hTeW50
aGVzaXNFdmVudEludGVyZmFjZVR5cGU7IH0KICAgICAKIHByaXZhdGU6CiAgICAgU3BlZWNoU3lu
dGhlc2lzRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBTcGVlY2hTeW50aGVzaXNVCiAgICAgcmV0dXJuIENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9ICAgIAogICAgIAotY29uc3QgQXRv
bWljU3RyaW5nJiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OmludGVyZmFjZU5hbWUoKSBjb25z
dAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7CisgICAgcmV0dXJuIFNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU3BlZWNoU3ludGhlc2lz
Vm9pY2UqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9pY2UoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3
ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldERh
dGEgbV9ldmVudFRhcmdldERhdGE7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSB7IHJlZigpOyB9CiAgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSB7IGRlcmVmKCk7IH0KICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4g
Jm1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1MCw5ICs5NTAsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6cHJvY2Vzc0F1dG9tYXRpY1B1
bGxOCiAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZO
ZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBBdWRp
b0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgQXVk
aW9Db250ZXh0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb0NvbnRleHQ7CisgICAgcmV0dXJuIEF1ZGlvQ29u
dGV4dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogQXVkaW9Db250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRpb1N1bW1pbmdKdW5jdGlvbiopOwogCiAg
ICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEV2ZW50VGFy
Z2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9
CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEmIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsg
cmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4MCw5ICsyODAsOSBAQCB2b2lkIEF1ZGlvTm9kZTo6dXBkYXRlQ2hhbm5lbHNGb3JJbnB1dHMo
CiAgICAgICAgIGlucHV0KGkpLT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIEF1ZGlvTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVy
ZmFjZSBBdWRpb05vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvTm9kZTsKKyAgICByZXR1cm4gQXVkaW9O
b2RlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgogICAgIEF1ZGlvQnVzOjpDaGFubmVs
SW50ZXJwcmV0YXRpb24gaW50ZXJuYWxDaGFubmVsSW50ZXJwcmV0YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2NoYW5uZWxJbnRlcnByZXRhdGlvbjsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1fZXZl
bnRUYXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEmIGVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJv
Y2Vzc2luZ0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDkgKzU4LDkgQEAgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6On5BdWRpb1Byb2Nlc3NpbmdFdgog
ewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpldmVu
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JBdWRpb1Byb2Nlc3NpbmdFdmVudDsKKyAgICByZXR1cm4gQXVkaW9Qcm9jZXNzaW5nRXZlbnRJ
bnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVu
dC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
cHVibGljOgogICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlcigpIHsgcmV0dXJuIG1faW5wdXRC
dWZmZXIuZ2V0KCk7IH0KICAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVyKCkgeyByZXR1cm4g
bV9vdXRwdXRCdWZmZXIuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZAogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dEludGVyZmFjZSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudDsKKyAgICByZXR1cm4gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJl
ZEJ1ZmZlcigpIHsgcmV0dXJuIG1fcmVuZGVyZWRCdWZmZXIuZ2V0KCk7IH0KIAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVhc29uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFzb247IH0KIAogICAgIC8vIEV2ZW50IGZ1bmN0aW9uLgotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckNsb3NlRXZlbnQ7IH0KKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
Q2xvc2VFdmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBDbG9zZUV2ZW50KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDkgKzQ0OCw5IEBAIHZvaWQg
V2ViU29ja2V0OjpzZXRCaW5hcnlUeXBlKGNvbnN0IFN0cmkKICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdl
TGV2ZWwsICInIiArIGJpbmFyeVR5cGUgKyAiJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgYmlu
YXJ5VHlwZTsgYmluYXJ5VHlwZSByZW1haW5zIHVuY2hhbmdlZC4iKTsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBXZWJTb2NrZXQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgV2ViU29ja2V0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJTb2NrZXQ7CisgICAgcmV0dXJuIFdl
YlNvY2tldEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogV2ViU29ja2V0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihjbG9zZSk7CiAKICAgICAvLyBFdmVudFRhcmdldCBmdW5j
dGlvbnMuCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OnJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsOCBAQCBKU0Vycm9ySGFuZGxlcjo6fkpTRXJyb3JIYW5kbGVyKCkK
IAogdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghZXZl
bnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudCkpCisK
KyAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5
cGUpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIEpT
RXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiB9CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBf
V0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXAotICAgIGlmIChldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yIyNpbnRlcmZhY2VOYW1lID09IGRlc2lyZWRJbnRlcmZhY2UpIFwKKyAgICBjYXNl
IGludGVyZmFjZU5hbWUjI0ludGVyZmFjZVR5cGU6IFwKICAgICAgICAgcmV0dXJuIENSRUFURV9E
T01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIGludGVyZmFjZU5hbWUsIGV2ZW50KTsKIAog
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRXZlbnQqIGV2ZW50KQpAQCAtNjMsOCArNjMsOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3
cmFwcGVyOwogCi0gICAgU3RyaW5nIGRlc2lyZWRJbnRlcmZhY2UgPSBldmVudC0+aW50ZXJmYWNl
TmFtZSgpOwotICAgIERPTV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKFRSWV9UT19XUkFQX1dJ
VEhfSU5URVJGQUNFKQorICAgIHN3aXRjaCAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkpIHsKKyAg
ICAgICAgRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goVFJZX1RPX1dSQVBfV0lUSF9JTlRF
UkZBQ0UpCisgICAgfQogCiAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9i
YWxPYmplY3QsIEV2ZW50LCBldmVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU2MjI0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBUUllfVE9fV1JBUF9XSVRIX0lOVEVSRkFDRShpbnRl
cmZhY2VOYW1lKSBcCi0gICAgaWYgKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3IjI2ludGVyZmFj
ZU5hbWUgPT0gZGVzaXJlZEludGVyZmFjZSkgXAorICAgIGNhc2UgaW50ZXJmYWNlTmFtZSMjRXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOiBcCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50ZXJmYWNlTmFtZSo+KHRhcmdldCkpOwogCiBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
dmVudFRhcmdldCogdGFyZ2V0KQpAQCAtNDQsMTkgKzQ0LDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAKLSAgICBBdG9taWNTdHJpbmcgZGVzaXJlZEludGVyZmFjZSA9IHRhcmdldC0+
aW50ZXJmYWNlTmFtZSgpOwotCi0gICAgLy8gRklYTUU6IFdoeSBjYW4ndCB3ZSB1c2UgdG9KUyBm
b3IgdGhlc2UgY2FzZXM/Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgaWYgKGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9PSBkZXNpcmVkSW50ZXJm
YWNlKQotICAgICAgICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChzdGF0aWNfY2FzdDxEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZSo+KHRhcmdldCksIGV4ZWMpOwotI2VuZGlmCi0jaWYgRU5B
QkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU2hh
cmVkV29ya2VyR2xvYmFsU2NvcGUgPT0gZGVzaXJlZEludGVyZmFjZSkKLSAgICAgICAgcmV0dXJu
IHRvSlNET01HbG9iYWxPYmplY3Qoc3RhdGljX2Nhc3Q8U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUq
Pih0YXJnZXQpLCBleGVjKTsKLSNlbmRpZgotCisgICAgc3dpdGNoICh0YXJnZXQtPmV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkpIHsKICAgICBET01fRVZFTlRfVEFSR0VUX0lOVEVSRkFDRVNfRk9SX0VB
Q0goVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UpCisgICAgfQogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01FdmVudHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01FdmVudHMubW0JKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NRXZlbnRzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyMSAr
NDksMjUgQEAgQ2xhc3Mga2l0Q2xhc3MoV2ViQ29yZTo6RXZlbnQqIGltcGwpCiAgICAgICAgICAg
ICByZXR1cm4gW0RPTUtleWJvYXJkRXZlbnQgY2xhc3NdOwogICAgICAgICBpZiAoaW1wbC0+aXNN
b3VzZUV2ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gW0RPTU1vdXNlRXZlbnQgY2xhc3NdOwot
ICAgICAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JU
ZXh0RXZlbnQpKQorCisgICAgICAgIFdlYkNvcmU6OkV2ZW50SW50ZXJmYWNlIGRlc2lyZWRJbnRl
cmZhY2UgPSBpbXBsLT5ldmVudEludGVyZmFjZSgpOworICAgICAgICBpZiAoZGVzaXJlZEludGVy
ZmFjZSA9PSBXZWJDb3JlOjpUZXh0RXZlbnRJbnRlcmZhY2VUeXBlKQogICAgICAgICAgICAgcmV0
dXJuIFtET01UZXh0RXZlbnQgY2xhc3NdOwotICAgICAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNl
KGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkKLSAgICAgICAgICAgIHJldHVy
biBbRE9NV2hlZWxFdmVudCBjbGFzc107ICAgICAgICAKKyAgICAgICAgaWYgKGRlc2lyZWRJbnRl
cmZhY2UgPT0gV2ViQ29yZTo6V2hlZWxFdmVudEludGVyZmFjZVR5cGUpCisgICAgICAgICAgICBy
ZXR1cm4gW0RPTVdoZWVsRXZlbnQgY2xhc3NdOwogICAgICAgICByZXR1cm4gW0RPTVVJRXZlbnQg
Y2xhc3NdOwogICAgIH0KLSAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JNdXRhdGlvbkV2ZW50KSkKKworICAgIFdlYkNvcmU6OkV2ZW50SW50ZXJmYWNl
IGRlc2lyZWRJbnRlcmZhY2UgPSBpbXBsLT5ldmVudEludGVyZmFjZSgpOworICAgIGlmIChkZXNp
cmVkSW50ZXJmYWNlID09IFdlYkNvcmU6Ok11dGF0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKQogICAg
ICAgICByZXR1cm4gW0RPTU11dGF0aW9uRXZlbnQgY2xhc3NdOwotICAgIGlmIChpbXBsLT5oYXNJ
bnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvck92ZXJmbG93RXZlbnQpKQorICAgIGlm
IChkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6Ok92ZXJmbG93RXZlbnRJbnRlcmZhY2VUeXBl
KQogICAgICAgICByZXR1cm4gW0RPTU92ZXJmbG93RXZlbnQgY2xhc3NdOwotICAgIGlmIChpbXBs
LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lc3NhZ2VFdmVudCkpCisg
ICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6TWVzc2FnZUV2ZW50SW50ZXJmYWNl
VHlwZSkKICAgICAgICAgcmV0dXJuIFtET01NZXNzYWdlRXZlbnQgY2xhc3NdOwotICAgIGlmIChp
bXBsLT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvclByb2dyZXNzRXZlbnQp
IHx8IGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50KSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3Jl
OjpQcm9ncmVzc0V2ZW50SW50ZXJmYWNlVHlwZSB8fCBkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudEludGVyZmFjZVR5cGUpCiAgICAgICAgIHJl
dHVybiBbRE9NUHJvZ3Jlc3NFdmVudCBjbGFzc107Ci0gICAgaWYgKGltcGwtPmhhc0ludGVyZmFj
ZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3JlTG9hZEV2ZW50KSkKKyAgICBpZiAoZGVz
aXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpCZWZvcmVMb2FkRXZlbnRJbnRlcmZhY2VUeXBlKQog
ICAgICAgICByZXR1cm4gW0RPTUJlZm9yZUxvYWRFdmVudCBjbGFzc107CiAgICAgcmV0dXJuIFtE
T01FdmVudCBjbGFzc107CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VM
b2FkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZUxvYWRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZUxvYWRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAg
Q1NTRm9udEZhY2VMb2FkRXZlbnQ6On5DU1NGb250RmFjZUxvYWRFdgogewogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIENTU0ZvbnRGYWNlTG9hZEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QK
K0V2ZW50SW50ZXJmYWNlIENTU0ZvbnRGYWNlTG9hZEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDU1NGb250RmFjZUxv
YWRFdmVudDsKKyAgICByZXR1cm4gQ1NTRm9udEZhY2VMb2FkRXZlbnRJbnRlcmZhY2VUeXBlOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VMb2FkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VMb2FkRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcg
QEAgcHVibGljOgogICAgIENTU0ZvbnRGYWNlUnVsZSogZm9udGZhY2UoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnRmYWNlLmdldCgpOyB9CiAgICAgRE9NRXJyb3IqIGVycm9yKCkgY29uc3QgeyByZXR1
cm4gbV9lcnJvci5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50
ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NTRm9udEZhY2VMb2FkRXZlbnQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBsb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nQ291
bnQgPiAwOyB9CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8Rm9u
dExvYWRlcj46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPEZvbnRMb2FkZXI+OjpkZXJlZjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXJsOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZv
cmVMb2FkRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNl
KCkgY29uc3QgeyByZXR1cm4gQmVmb3JlTG9hZEV2ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2
YXRlOgogICAgIEJlZm9yZUxvYWRFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEwICszOSwxMCBAQCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6fkJlZm9yZVRleHRJ
bnNlCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKICAgICAvLyBOb3RpY2UgdGhhdCB0aGVy
ZSBpcyBubyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5pZGwuCi0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JFdmVudDsKKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQp
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFt
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
cmV0dXJuVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3JldHVyblZhbHVlOyB9CiAgICAgdm9pZCBz
ZXRSZXR1cm5WYWx1ZShjb25zdCBTdHJpbmcmIHJldHVyblZhbHVlKSB7IG1fcmV0dXJuVmFsdWUg
PSByZXR1cm5WYWx1ZTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVy
ZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yQmVmb3JlVW5sb2FkRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50
SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQmVmb3JlVW5sb2FkRXZlbnRJbnRl
cmZhY2VUeXBlOyB9CiAKIHByaXZhdGU6CiAgICAgQmVmb3JlVW5sb2FkRXZlbnQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTAgKzQxLDEwIEBAIENsaXBib2FyZEV2ZW50Ojp+Q2xpcGJvYXJkRXZlbnQoKQogewogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIENsaXBib2FyZEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29u
c3QKK0V2ZW50SW50ZXJmYWNlIENsaXBib2FyZEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0
CiB7CiAgICAgLy8gTm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gQ2xpcGJvYXJkRXZlbnQuaWRsLgot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQ7CisgICAgcmV0dXJuIEV2
ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRF
dmVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBD
bGlwYm9hcmRFdmVudCgpOwogICAgICAgICBDbGlwYm9hcmRFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPik7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBFdmVudEludGVy
ZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgICAgIFJlZlB0cjxD
bGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0
aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlv
bkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBv
c2l0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5IEBAIHZvaWQgQ29t
cG9zaXRpb25FdmVudDo6aW5pdENvbXBvc2l0aW9uRXYKICAgICBtX2RhdGEgPSBkYXRhOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIENvbXBvc2l0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBj
b25zdAorRXZlbnRJbnRlcmZhY2UgQ29tcG9zaXRpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBj
b25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQ29tcG9zaXRpb25F
dmVudDsKKyAgICByZXR1cm4gQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlv
bkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZl
bnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9u
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBT
dHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50
SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ29tcG9z
aXRpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgQ3VzdG9tRXZlbnQ6OmluaXRDdXN0b21FdmVu
dChjb25zdCAKICAgICBtX2RldGFpbCA9IGRldGFpbDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBDdXN0b21FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBDdXN0
b21FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yQ3VzdG9tRXZlbnQ7CisgICAgcmV0dXJuIEN1c3RvbUV2ZW50SW50ZXJm
YWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgaW5pdEN1c3RvbUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5C
dWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU2NyaXB0VmFsdWUmIGRldGFpbCk7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIGNv
bnN0IFNjcmlwdFZhbHVlJiBkZXRhaWwoKSBjb25zdCB7IHJldHVybiBtX2RldGFpbDsgfQogICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUo
KSB7IHJldHVybiBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RldmljZU1vdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwx
NSArNTUsMTUgQEAgdm9pZCBEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbgogICAg
IG1fZGV2aWNlTW90aW9uRGF0YSA9IGRldmljZU1vdGlvbkRhdGE7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgRGV2aWNlTW90aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJ
bnRlcmZhY2UgRGV2aWNlTW90aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yRGV2aWNlTW90aW9uRXZlbnQ7CisgICAgcmV0dXJuIERldmljZU1vdGlvbkV2ZW50
SW50ZXJmYWNlVHlwZTsKICNlbHNlCiAgICAgLy8gRklYTUU6IEVOQUJMRShERVZJQ0VfT1JJRU5U
QVRJT04pIHNlZW1zIHRvIGJlIGluIGEgc3RyYW5nZSBzdGF0ZSB3aGVyZQogICAgIC8vIGl0IGlz
IGhhbGYtZ3VhcmRlZCBieSAjaWZkZWZzLiBEZXZpY2VNb3Rpb25FdmVudC5pZGwgaXMgZ3VhcmRl
ZAogICAgIC8vIGJ1dCBEZXZpY2VNb3Rpb25FdmVudC5jcHAgaXRzZWxmIGlzIHJlcXVpcmVkIGJ5
IHVuZ2FyZGVkIGNvZGUuCi0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JFdmVu
dDsKKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VNb3Rpb25EYXRhKiBkZXZpY2VNb3Rp
b25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VNb3Rpb25EYXRhLmdldCgpOyB9CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBEZXZpY2VNb3Rpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rl
dmljZU9yaWVudGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxNSArNTUsMTUgQEAgdm9pZCBEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2aWNl
TwogICAgIG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
SW50ZXJmYWNlIERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QK
IHsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yRGV2aWNlT3JpZW50YXRpb25FdmVudDsKKyAgICByZXR1cm4gRGV2aWNl
T3JpZW50YXRpb25FdmVudEludGVyZmFjZVR5cGU7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKSBzZWVtcyB0byBiZSBpbiBhIHN0cmFuZ2Ugc3RhdGUgd2hl
cmUKICAgICAvLyBpdCBpcyBoYWxmLWd1YXJkZWQgYnkgI2lmZGVmcy4gRGV2aWNlT3JpZW50YXRp
b25FdmVudC5pZGwgaXMgZ3VhcmRlZAogICAgIC8vIGJ1dCBEZXZpY2VPcmllbnRhdGlvbkV2ZW50
LmNwcCBpdHNlbGYgaXMgcmVxdWlyZWQgYnkgdW5nYXJkZWQgY29kZS4KLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvckV2ZW50OworICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5
cGU7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50
YXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKIAogICAgIERldmljZU9yaWVudGF0aW9uRGF0YSogb3JpZW50YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX29yaWVudGF0aW9uLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBEZXZpY2VPcmllbnRh
dGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDkgKzY5LDkgQEAgRXJyb3JFdmVudDo6fkVycm9yRXZlbnQoKQogewogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIEVycm9yRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgRXJyb3JFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJl
dHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudDsKKyAgICByZXR1cm4gRXJy
b3JFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0Vycm9yRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0Vycm9yRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgbGluZW5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9
CiAgICAgdW5zaWduZWQgY29sbm8oKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQog
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgRXJyb3JFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsMTQgKzEyMSw5IEBAIHZvaWQgRXZlbnQ6OmluaXRFdmVudChjb25zdCBBdG9taWNT
dHJpbmcKICAgICBtX2NhbmNlbGFibGUgPSBjYW5jZWxhYmxlQXJnOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEV2
ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JFdmVudDsKLX0KLQotYm9vbCBFdmVudDo6aGFzSW50ZXJmYWNlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaW50ZXJmYWNlTmFtZSgpID09
IG5hbWU7CisgICAgcmV0dXJuIEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBFdmVudDo6
aXNVSUV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs
NyBAQAogI2RlZmluZSBFdmVudF9oCiAKICNpbmNsdWRlICJET01UaW1lU3RhbXAuaCIKLSNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRJbnRlcmZhY2VzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KQEAgLTQ3LDYgKzQ3LDE0IEBAIHN0cnVjdCBFdmVudEluaXQg
ewogICAgIGJvb2wgY2FuY2VsYWJsZTsKIH07CiAKK2VudW0gRXZlbnRJbnRlcmZhY2UgeworCisj
ZGVmaW5lIERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRShuYW1lKSBuYW1lIyNJbnRlcmZhY2VU
eXBlLAorRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goRE9NX0VWRU5UX0lOVEVSRkFDRV9E
RUNMQVJFKQorI3VuZGVmIERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRQorCit9OworCiBjbGFz
cyBFdmVudCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50
PiB7CiBwdWJsaWM6CiAgICAgZW51bSBQaGFzZVR5cGUgeyAKQEAgLTEyMCw4ICsxMjgsNyBAQCBw
dWJsaWM6CiAKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZERhdGEoKSBjb25zdCB7IHJldHVybiBp
c0NsaXBib2FyZEV2ZW50KCkgPyBjbGlwYm9hcmQoKSA6IDA7IH0KIAotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNJbnRl
cmZhY2UoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVy
ZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgZXZlbnRzIGFyZSBn
ZW5lcmFsIGNsYXNzZXMgb2YgZXZlbnRzLgogICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTQgKzI2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBJTklUSUFMSVpFX0VW
RU5UX05BTUUobmFtZSkgXAogICAgICwgbmFtZSMjRXZlbnQoI25hbWUsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpCiAKLSNkZWZpbmUgSU5JVElBTElaRV9FVkVOVF9JTlRFUkZB
Q0UobmFtZSkgXAotICAgICwgaW50ZXJmYWNlRm9yIyNuYW1lKCNuYW1lLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotCiBFdmVudE5hbWVzOjpFdmVudE5hbWVzKCkKICAgICA6
IGR1bW15KDApCi1ET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVOVF9OQU1F
KQotRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVOVF9JTlRFUkZB
Q0UpCi1ET01fRVZFTlRfVEFSR0VUX0lOVEVSRkFDRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVO
VF9JTlRFUkZBQ0UpCisgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKElOSVRJQUxJWkVfRVZF
TlRfTkFNRSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw2IEBACiAjaWZuZGVmIEV2ZW50TmFtZXNfaAogI2RlZmluZSBFdmVudE5h
bWVzX2gKIAotI2luY2x1ZGUgIkV2ZW50SW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0SW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtMjY4LDU3ICsyNjYsNTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBlbmQgb2YgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNICiAKLSAg
ICBjbGFzcyBFdmVudE5hbWVzIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRO
YW1lcyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBpbnQgZHVtbXk7IC8vIE5l
ZWRlZCB0byBtYWtlIGluaXRpYWxpemF0aW9uIG1hY3JvIHdvcmsuCi0gICAgICAgIC8vIFByaXZh
dGUgdG8gcHJldmVudCBhY2NpZGVudGFsIGNhbGwgdG8gRXZlbnROYW1lcygpIGluc3RlYWQgb2Yg
ZXZlbnROYW1lcygpCi0gICAgICAgIEV2ZW50TmFtZXMoKTsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IFRocmVhZEdsb2JhbERhdGE7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgICNkZWZpbmUgRE9NX0VW
RU5UX05BTUVTX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OwotICAgICAg
ICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUpCi0gICAg
ICAgICN1bmRlZiBET01fRVZFTlRfTkFNRVNfREVDTEFSRQotCi0gICAgICAgICNkZWZpbmUgRE9N
X0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKG5hbWUpIEF0b21pY1N0cmluZyBpbnRlcmZhY2VGb3Ij
I25hbWU7Ci0gICAgICAgIERPTV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKERPTV9FVkVOVF9J
TlRFUkZBQ0VfREVDTEFSRSkKLSAgICAgICAgRE9NX0VWRU5UX1RBUkdFVF9JTlRFUkZBQ0VTX0ZP
Ul9FQUNIKERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRSkKLSAgICAgICAgI3VuZGVmIERPTV9F
VkVOVF9JTlRFUkZBQ0VfREVDTEFSRQotCi0gICAgICAgIGlubGluZSBib29sIGlzVG91Y2hFdmVu
dFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBldmVudFR5cGUgPT0gdG91Y2hzdGFydEV2ZW50Ci0gICAgICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IHRvdWNobW92ZUV2ZW50Ci0gICAgICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IHRvdWNoZW5kRXZlbnQKLSAgICAgICAgICAgICAgICB8fCBldmVudFR5cGUg
PT0gdG91Y2hjYW5jZWxFdmVudDsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBib29sIGlz
R2VzdHVyZUV2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBnZXN0dXJldGFwRXZlbnQK
LSAgICAgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXRhcGRvd25FdmVudAotICAg
ICAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsc3RhcnRFdmVudAotICAg
ICAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsZW5kRXZlbnQKLSAgICAg
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXNjcm9sbHVwZGF0ZUV2ZW50OwotICAg
ICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG91Y2hFdmVudE5hbWVzKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gbmFtZXM7
Ci0gICAgICAgICAgICBuYW1lcy5yZXNlcnZlQ2FwYWNpdHkoNCk7Ci0gICAgICAgICAgICBuYW1l
cy5hcHBlbmQodG91Y2hzdGFydEV2ZW50KTsKLSAgICAgICAgICAgIG5hbWVzLmFwcGVuZCh0b3Vj
aG1vdmVFdmVudCk7Ci0gICAgICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hlbmRFdmVudCk7Ci0g
ICAgICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hjYW5jZWxFdmVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbmFtZXM7Ci0gICAgICAgIH0KLSAgICB9OworY2xhc3MgRXZlbnROYW1lcyB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnROYW1lcyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIGludCBkdW1teTsgLy8gTmVlZGVkIHRvIG1ha2UgaW5pdGlhbGl6YXRpb24gbWFjcm8g
d29yay4KKyAgICAvLyBQcml2YXRlIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBjYWxsIHRvIEV2ZW50
TmFtZXMoKSBpbnN0ZWFkIG9mIGV2ZW50TmFtZXMoKQorICAgIEV2ZW50TmFtZXMoKTsKKyAgICBm
cmllbmQgY2xhc3MgVGhyZWFkR2xvYmFsRGF0YTsKKworcHVibGljOgorICAgICNkZWZpbmUgRE9N
X0VWRU5UX05BTUVTX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OworICAg
IERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChET01fRVZFTlRfTkFNRVNfREVDTEFSRSkKKyAgICAj
dW5kZWYgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUKIAotICAgIGlubGluZSBFdmVudE5hbWVzJiBl
dmVudE5hbWVzKCkKKyAgICBpbmxpbmUgYm9vbCBpc1RvdWNoRXZlbnRUeXBlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRocmVhZEds
b2JhbERhdGEoKS5ldmVudE5hbWVzKCk7CisgICAgICAgIHJldHVybiBldmVudFR5cGUgPT0gdG91
Y2hzdGFydEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2htb3ZlRXZlbnQK
KyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSB0b3VjaGVuZEV2ZW50CisgICAgICAgICAgICB8
fCBldmVudFR5cGUgPT0gdG91Y2hjYW5jZWxFdmVudDsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9v
bCBpc0dlc3R1cmVFdmVudFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZXZlbnRUeXBlID09IGdlc3R1cmV0YXBFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGdlc3R1cmV0YXBkb3duRXZlbnQKKyAgICAgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsc3RhcnRFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IGdlc3R1cmVzY3JvbGxlbmRFdmVudAorICAgICAgICAgICAgfHwgZXZlbnRU
eXBlID09IGdlc3R1cmVzY3JvbGx1cGRhdGVFdmVudDsKKyAgICB9CisKKyAgICBWZWN0b3I8QXRv
bWljU3RyaW5nPiB0b3VjaEV2ZW50TmFtZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9y
PEF0b21pY1N0cmluZz4gbmFtZXM7CisgICAgICAgIG5hbWVzLnJlc2VydmVDYXBhY2l0eSg0KTsK
KyAgICAgICAgbmFtZXMuYXBwZW5kKHRvdWNoc3RhcnRFdmVudCk7CisgICAgICAgIG5hbWVzLmFw
cGVuZCh0b3VjaG1vdmVFdmVudCk7CisgICAgICAgIG5hbWVzLmFwcGVuZCh0b3VjaGVuZEV2ZW50
KTsKKyAgICAgICAgbmFtZXMuYXBwZW5kKHRvdWNoY2FuY2VsRXZlbnQpOworICAgICAgICByZXR1
cm4gbmFtZXM7CisgICAgfQorfTsKKworaW5saW5lIEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMoKQor
eworICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRhKCkuZXZlbnROYW1lcygpOworfQorCiB9CiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyTWFwLmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0SW50ZXJmYWNlcy5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CkBAIC05OSwxMiArMTAwLDIwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgT3duUHRyPEZpcmluZ0V2ZW50SXRlcmF0b3JWZWN0b3I+IGZp
cmluZ0V2ZW50SXRlcmF0b3JzOwogICAgIH07CiAKKyAgICBlbnVtIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIHsKKworICAgICNkZWZpbmUgRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKG5hbWUpIG5h
bWUjI0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZSwKKyAgICBET01fRVZFTlRfVEFSR0VUX0lOVEVS
RkFDRVNfRk9SX0VBQ0goRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKQorICAgICN1bmRlZiBE
T01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUKKworICAgIH07CisKICAgICBjbGFzcyBFdmVudFRh
cmdldCB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHJlZigpIHsgcmVmRXZlbnRUYXJnZXQo
KTsgfQogICAgICAgICB2b2lkIGRlcmVmKCkgeyBkZXJlZkV2ZW50VGFyZ2V0KCk7IH0KIAotICAg
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0ID0g
MDsKKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwg
Tm9kZSogdG9Ob2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDkgKzM5LDkgQEAgRm9jdXNFdmVudEluaXQ6OkZvY3VzRXZlbnRJbml0KCkK
IHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBGb2N1c0V2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50SW50ZXJmYWNlIEZvY3VzRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckZvY3VzRXZlbnQ7CisgICAg
cmV0dXJuIEZvY3VzRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIEZvY3VzRXZlbnQ6Omlz
Rm9jdXNFdmVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOyB9CiAgICAgdm9pZCBz
ZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpIHsg
bV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNF
dmVudCgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1
cmVFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMTAgQEAgdm9pZCBHZXN0dXJlRXZl
bnQ6OmluaXRHZXN0dXJlRXZlbnQoY29ucwogICAgIGluaXRDb29yZGluYXRlcyhJbnRQb2ludChj
bGllbnRYLCBjbGllbnRZKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgR2VzdHVyZUV2ZW50
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEdlc3R1cmVFdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBuYW1lLCAoIlRCREludGVyZmFjZSIpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICAvLyBG
SVhNRTogVGhpcyBtYWtlcyBpdCBzbyB3ZSBuZXZlciB3cmFwIEdlc3R1cmVFdmVudHMgaW4gdGhl
IHJpZ2h0IGJpbmRpbmdzLgorICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIEdl
c3R1cmVFdmVudDo6R2VzdHVyZUV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0
dXJlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50
LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGlu
aXRHZXN0dXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4sIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IGNsaWVudFgsIGludCBjbGll
bnRZLCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFL
ZXksIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVy
ZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWx0YVg7IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBt
X2RlbHRhWTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIG9s
ZFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fb2xkVVJMOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuZXdV
UkwoKSBjb25zdCB7IHJldHVybiBtX25ld1VSTDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9ySGFzaENoYW5nZUV2ZW50OyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIEhhc2hDaGFuZ2VFdmVudEludGVyZmFjZVR5
cGU7IH0KIAogcHJpdmF0ZToKICAgICBIYXNoQ2hhbmdlRXZlbnQoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9LZXlib2FyZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOSArMTg4LDkg
QEAgaW50IEtleWJvYXJkRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pih0ZXh0LmNoYXJhY3RlclN0YXJ0aW5nQXQoMCkpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIEtleWJvYXJkRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRl
cmZhY2UgS2V5Ym9hcmRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVy
biBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yS2V5Ym9hcmRFdmVudDsKKyAgICByZXR1cm4gS2V5
Ym9hcmRFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgS2V5Ym9hcmRFdmVudDo6aXNLZXli
b2FyZEV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICBpbnQga2V5Q29kZSgp
IGNvbnN0OyAvLyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Ig
a2V5cHJlc3MKICAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsgLy8gY2hhcmFjdGVyIGNvZGUgZm9y
IGtleXByZXNzLCAwIGZvciBrZXlkb3duIGFuZCBrZXl1cAogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9h
cmRFdmVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDkg
KzE2Niw5IEBAIHZvaWQgTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KGNvbnMKICAgICBp
bml0TWVzc2FnZUV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2lu
LCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0cy5yZWxlYXNlKCkpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIE1lc3NhZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVy
ZmFjZSBNZXNzYWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lc3NhZ2VFdmVudDsKKyAgICByZXR1cm4gTWVzc2Fn
ZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBA
IHB1YmxpYzoKICAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQoKTsKICAgICB2b2lkIGluaXRN
ZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29u
c3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyog
c291cmNlLCBNZXNzYWdlUG9ydCopOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50
SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBlbnVtIERhdGFUeXBlIHsKICAgICAgICAgRGF0YVR5
cGVTY3JpcHRWYWx1ZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0
cm95ZWQoKQogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgTWVzc2FnZVBvcnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgTWVzc2FnZVBvcnQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lc3NhZ2VQb3J0OworICAgIHJl
dHVybiBNZXNzYWdlUG9ydEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogTWVzc2FnZVBvcnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGNvbnRleHREZXN0cm95
ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFt
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9W
RVJSSURFOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlUG9ydCgpIGNvbnN0IE9WRVJS
SURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50
LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsOSArMTc1LDkgQEAgdm9pZCBNb3VzZUV2ZW50Ojpp
bml0TW91c2VFdmVudChjb25zdCBBdAogICAgIC8vIEZJWE1FOiBtX2NsaXBib2FyZCBpcyBub3Qg
c2V0IHRvIDAgaGVyZS4KIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNb3VzZUV2ZW50OjppbnRl
cmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1vdXNlRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1vdXNl
RXZlbnQ7CisgICAgcmV0dXJuIE1vdXNlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIE1v
dXNlRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
TW91c2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50
LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgQ2xpcGJvYXJk
KiBkYXRhVHJhbnNmZXIoKSBjb25zdCB7IHJldHVybiBpc0RyYWdFdmVudCgpID8gbV9jbGlwYm9h
cmQuZ2V0KCkgOiAwOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCB2b2lk
IE11dGF0aW9uRXZlbnQ6OmluaXRNdXRhdGlvbkV2ZW50KGNvCiAgICAgbV9hdHRyQ2hhbmdlID0g
YXR0ckNoYW5nZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNdXRhdGlvbkV2ZW50OjppbnRl
cmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE11dGF0aW9uRXZlbnQ6OmV2ZW50SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck11
dGF0aW9uRXZlbnQ7CisgICAgcmV0dXJuIE11dGF0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50
LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBTdHJpbmcgYXR0ck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJOYW1lOyB9CiAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJD
aGFuZ2U7IH0KIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNl
TmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJm
YWNlKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBNdXRhdGlvbkV2ZW50KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjMsOSArMTgyMyw5IEBAIE5vZGUqIE5v
ZGU6OmVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2UKICAgICByZXR1cm4gMDsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBOb2RlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0
SW50ZXJmYWNlIE5vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck5vZGU7CisgICAgcmV0dXJuIE5vZGVFdmVudFRh
cmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE5vZGU6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApAQCAtMjE5Nyw3ICsyMTk3LDcgQEAgdm9pZCBO
b2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldgogICAgICAgICAgICAgICAgIHBhZ2Ut
PmNvbnRleHRNZW51Q29udHJvbGxlcigpLmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpOwog
I2VuZGlmCiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1
dEV2ZW50KSB7Ci0gICAgICAgIGlmIChldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JUZXh0RXZlbnQpKQorICAgICAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNl
KCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoc3RhdGljX2Nhc3Q8VGV4dEV2ZW50
Kj4oZXZlbnQpKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKQEAgLTIyMTcsNyArMjIxNyw3
IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXYKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogI2VuZGlmCi0gICAgfSBlbHNlIGlmICgoZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVl
bEV2ZW50KSAmJiBldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JX
aGVlbEV2ZW50KSkgeworICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
d2hlZWxFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkg
JiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsK
ICAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PFdoZWVsRXZlbnQq
PihldmVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVy
ZXIsIHNlbmQgdGhlIHdoZWVsIGV2ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdlIGZpbmQgd2l0aCBh
IHJlbmRlcmVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgTm9kZSogdG9Ob2RlKCk7CiAgICAgdmlydHVhbCBIVE1MSW5wdXRF
bGVtZW50KiB0b0lucHV0RWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vT3ZlcmZsb3dFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgs
OSBAQCBPdmVyZmxvd0V2ZW50OjpPdmVyZmxvd0V2ZW50KGNvbnN0IEF0b21pCiB7CiB9CiAKLWNv
bnN0IEF0b21pY1N0cmluZyYgT3ZlcmZsb3dFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudEludGVyZmFjZSBPdmVyZmxvd0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPdmVyZmxvd0V2ZW50OworICAgIHJl
dHVybiBPdmVyZmxvd0V2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogdm9pZCBPdmVyZmxvd0V2ZW50
Ojppbml0T3ZlcmZsb3dFdmVudCh1bnNpZ25lZCBzaG9ydCBvcmllbnQsIGJvb2wgaG9yaXpvbnRh
bE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vT3ZlcmZsb3dFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVy
Zmxvd0V2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVy
Zmxvd0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3Zl
cmZsb3c7IH0KICAgICBib29sIHZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Zl
cnRpY2FsT3ZlcmZsb3c7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRl
cmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVy
ZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIE92ZXJmbG93RXZlbnQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBQYWdlVHJhbnNpdGlvbkV2ZW50Ojp+UGFnZVRyYW5z
aXRpb25FdmVuCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUGFnZVRyYW5zaXRpb25FdmVu
dDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBQYWdlVHJhbnNpdGlvbkV2
ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JQYWdlVHJhbnNpdGlvbkV2ZW50OworICAgIHJldHVybiBQYWdlVHJhbnNpdGlv
bkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflBhZ2VUcmFuc2l0
aW9uRXZlbnQoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgp
IGNvbnN0OwogCiAgICAgYm9vbCBwZXJzaXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3Rl
ZDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDkgKzc4LDkgQEAgUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBQb3BTdGF0
ZUV2ZW50OgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9wU3RhdGVFdmVudCh0eXBlLCBpbml0
aWFsaXplcikpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFBvcFN0YXRlRXZlbnQ6OmludGVy
ZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUG9wU3RhdGVFdmVudDo6ZXZlbnRJbnRl
cmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUG9w
U3RhdGVFdmVudDsKKyAgICByZXR1cm4gUG9wU3RhdGVFdmVudEludGVyZmFjZVR5cGU7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0
ZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2Ny
aXB0VmFsdWUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIEhpc3Rvcnkq
IGhpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0KIAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IFBvcFN0YXRlRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5jcHAJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBQcm9ncmVzc0V2ZW50OjpQcm9ncmVz
c0V2ZW50KGNvbnN0IEF0b21pCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUHJvZ3Jlc3NF
dmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBQcm9ncmVzc0V2ZW50
OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JQcm9ncmVzc0V2ZW50OworICAgIHJldHVybiBQcm9ncmVzc0V2ZW50SW50ZXJmYWNl
VHlwZTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bG9hZGVkKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkZWQ7IH0KICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWwoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJ
bnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIFByb2dy
ZXNzRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5UG9s
aWN5VmlvbGF0aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VGaWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VGaWxlOyB9CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVOdW1iZXI7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNl
Y3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNl
IGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25F
dmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDkgKzExNCw5IEBAIHZvaWQgVGV4dEV2ZW50Ojppbml0VGV4dEV2ZW50KGNvbnN0IEF0
b20KICAgICBtX2RhdGEgPSBkYXRhOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRleHRFdmVu
dDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBUZXh0RXZlbnQ6OmV2ZW50
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
clRleHRFdmVudDsKKyAgICByZXR1cm4gVGV4dEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAkocmV2aXNpb24g
MTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICAgICAgU3Ry
aW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAotICAgICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBp
c0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0
TGluZUJyZWFrOyB9CiAgICAgICAgIGJvb2wgaXNDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0Q29tcG9zaXRpb247IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmFuc2l0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9UcmFuc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
OSArNzYsOSBAQCBjb25zdCBTdHJpbmcmIFRyYW5zaXRpb25FdmVudDo6cHNldWRvRWxlCiAgICAg
cmV0dXJuIG1fcHNldWRvRWxlbWVudDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBUcmFuc2l0
aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgVHJhbnNpdGlv
bkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JUcmFuc2l0aW9uRXZlbnQ7CisgICAgcmV0dXJuIFRyYW5zaXRpb25FdmVu
dEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9UcmFuc2l0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGVsYXBzZWRUaW1lKCkgY29uc3Q7CiAgICAgY29uc3Qg
U3RyaW5nJiBwc2V1ZG9FbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUcmFuc2l0aW9uRXZl
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAs
OSBAQCBib29sIFVJRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVUlFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudEludGVyZmFjZSBVSUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JVSUV2ZW50OworICAgIHJldHVybiBVSUV2ZW50
SW50ZXJmYWNlVHlwZTsKIH0KIAogaW50IFVJRXZlbnQ6OmtleUNvZGUoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVUlFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
VUlFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBB
YnN0cmFjdFZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXcuZ2V0KCk7IH0KICAgICBp
bnQgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWw7IH0KIAotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVu
dEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1VJ
RXZlbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAkocmV2aXNpb24g
MTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOSBAQCBkb3VibGUgV2ViS2l0QW5pbWF0aW9uRXZl
bnQ6OmVsYXBzZWRUaW1lCiAgICAgcmV0dXJuIG1fZWxhcHNlZFRpbWU7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAor
RXZlbnRJbnRlcmZhY2UgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktpdEFuaW1hdGlv
bkV2ZW50OworICAgIHJldHVybiBXZWJLaXRBbmltYXRpb25FdmVudEludGVyZmFjZVR5cGU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRBbmltYXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRBbmltYXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKCkgY29uc3Q7CiAgICAg
ZG91YmxlIGVsYXBzZWRUaW1lKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJLaXRBbmltYXRpb25F
dmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5jcHAJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDAsOSArMjQwLDkgQEAgdm9pZCBXZWJLaXROYW1lZEZsb3c6OmRp
c3BhdGNoUmVnaW9uT3ZlcgogICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIFdlYktpdE5hbWVkRmxvdzo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dFRhcmdldEludGVyZmFjZSBXZWJLaXROYW1lZEZsb3c6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktpdE5hbWVk
RmxvdzsKKyAgICByZXR1cm4gV2ViS2l0TmFtZWRGbG93RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBl
OwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXZWJLaXROYW1lZEZsb3c6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5h
bWVkRmxvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZs
b3cuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVk
Rmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBSZWZDb3VudGVkPFdlYktpdE5hbWVkRmxvdz46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVk
PFdlYktpdE5hbWVkRmxvdz46OmRlcmVmOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBKUyBiaW5kaW5nIGNvZGUgdG8gZGV0ZXJt
aW5lIGlmIHRoZSBOYW1lZEZsb3cgb2JqZWN0IGlzIHJlYWNoYWJsZSBvciBub3QuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAkocmV2aXNpb24g
MTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDkgQEAgY29uc3QgU3RyaW5nJiBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQ6OnBzZQogICAgIHJldHVybiBtX3BzZXVkb0VsZW1lbnQ7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgV2ViS2l0VHJhbnNpdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29u
c3QKK0V2ZW50SW50ZXJmYWNlIFdlYktpdFRyYW5zaXRpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViS2l0VHJh
bnNpdGlvbkV2ZW50OworICAgIHJldHVybiBXZWJLaXRUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VU
eXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OwogICAg
IGNvbnN0IFN0cmluZyYgcHNldWRvRWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50
SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0
VHJhbnNpdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNSw5ICsxMTUsOSBAQCB2b2lkIFdoZWVsRXZlbnQ6OmluaXRXZWJLaXRX
aGVlbEV2ZW50KGluCiAgICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtl
eSwgbWV0YUtleSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgV2hlZWxFdmVudDo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBXaGVlbEV2ZW50OjpldmVudEludGVyZmFj
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2
ZW50OworICAgIHJldHVybiBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBXaGVl
bEV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1do
ZWVsRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5o
CShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICAvLyBOZWVkZWQgZm9y
IE9iamVjdGl2ZS1DIGxlZ2FjeSBzdXBwb3J0CiAgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25z
dCB7IHJldHVybiBtX3doZWVsRGVsdGEueCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50
KCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ci5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgRmlsZVJlYWRlcjo6fkZp
bGVSZWFkZXIoKQogICAgIHRlcm1pbmF0ZSgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEZp
bGVSZWFkZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgRmls
ZVJlYWRlcjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yRmlsZVJlYWRlcjsKKyAgICByZXR1cm4gRmlsZVJlYWRlckV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBGaWxlUmVhZGVyOjpjYW5TdXNwZW5k
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN0cmluZ1Jlc3VsdCgp
OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCiAgICAgLy8gRmlsZVJlYWRl
ckxvYWRlckNsaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcAogCiB2b2lkIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChy
ZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50
KCkgfHwgZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxF
dmVudCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKKyAgICBp
ZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdF
dmVudCgpIHx8IGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VU
eXBlIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAg
IGZvcndhcmRFdmVudChldmVudCk7CiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+
aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKQogICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0OSw5ICs2NDksOSBAQCB2b2lkIE1lZGlhQ29udHJvbGxlcjo6cmV0dXJu
VG9SZWFsdGltZSgpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnJldHVyblRvUmVh
bHRpbWUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xsZXI6OmludGVy
ZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFDb250cm9sbGVyOjpl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JNZWRpYUNvbnRyb2xsZXI7CisgICAgcmV0dXJuIE1lZGlhQ29udHJvbGxlckV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogLy8gVGhlIHNwZWMgc2F5cyB0byBmaXJlIHBl
cmlvZGljIHRpbWV1cGRhdGUgZXZlbnRzICh0aG9zZSBzZW50IHdoaWxlIHBsYXlpbmcpIGV2ZXJ5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyBkZXJlZigpOyB9Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9OwogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBPVkVSUklERSB7IHJldHVy
biAmbV9ldmVudFRhcmdldERhdGE7IH0KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSYgZW5z
dXJlRXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9ldmVudFRhcmdldERhdGE7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmNwcAkocmV2aXNpb24gMTU2
MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksOSArNTksOSBAQCBNZWRpYUtleUV2ZW50Ojp+TWVkaWFLZXlFdmVudCgpCiB7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFLZXlFdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBNZWRpYUtleUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYUtleUV2ZW50
OworICAgIHJldHVybiBNZWRpYUtleUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmgJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZWRpYUtleUV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CiAgICAgfQogCi0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBTdHJp
bmcga2V5U3lzdGVtKCkgY29uc3QgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KICAgICBTdHJpbmcg
c2Vzc2lvbklkKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWQ7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpmb3J3YXJkRXZl
bnQoRXYKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZWxlbWVudCgpLnJl
bmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQo
KSB8fCBldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2
ZW50KSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkpIHsKKyAgICBpZiAoZWxlbWVudCgp
LnJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZl
bnQoKSB8fCBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlw
ZSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudCkpIHsKICAgICAgICAgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKGVsZW1lbnQoKS5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgewogICAgICAgICAgICAgaWYgKFJlbmRlckJv
eCogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpKSB7
CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJsdXJF
dmVudAogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShF
dmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS50ZXh0SW5wdXRFdmVudCAmJiBldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JUZXh0RXZlbnQpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KS0+ZGF0
YSgpID09ICJcbiIpIHx8IElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVudCk7
CisgICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVu
dCAmJiBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBUZXh0RXZlbnRJbnRlcmZhY2VUeXBlICYm
IHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KS0+ZGF0YSgpID09ICJcbiIpIHx8IElucHV0
VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVudCk7CiB9CiAKIFJlbmRlckVsZW1lbnQq
IFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEmIGFyZW5hLCBS
ZW5kZXJTdHlsZSYpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDkgKzU2LDkgQEAgV2ViR0xDb250ZXh0RXZlbnQ6On5XZWJHTENvbnRleHRFdmVudCgpCiB7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgV2ViR0xDb250ZXh0RXZlbnQ6OmludGVyZmFjZU5h
bWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgV2ViR0xDb250ZXh0RXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYkdM
Q29udGV4dEV2ZW50OworICAgIHJldHVybiBXZWJHTENvbnRleHRFdmVudEludGVyZmFjZVR5cGU7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIHN0YXR1c01l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c01lc3NhZ2U7IH0KIAotICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBF
dmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdl
YkdMQ29udGV4dEV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzQXBwbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwMSw5ICs2MDEsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6
OmhhCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
CiAgICAgICAgIG1fbWVkaWFDb250cm9scy0+aGFuZGxlQ2xpY2tFdmVudChldmVudCk7Ci0KLSAg
ICBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCi0gICAgICAgICYm
IGV2ZW50LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQp
KSB7CisgICAgZWxzZSBpZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZl
bnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBl
dmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSkgewogICAg
ICAgICBXaGVlbEV2ZW50KiB3aGVlbEV2ZW50ID0gc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGV2
ZW50KTsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9scy0+c2hvdWxkQ2xvc2VkQ2FwdGlvbnND
b250YWluZXJQcmV2ZW50UGFnZVNjcm9sbGluZyh3aGVlbEV2ZW50LT53aGVlbERlbHRhWSgpKSkK
ICAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gMTU2
MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVu
dDo6Zm9yd2FyZEV2ZW50KEV2ZQogICAgIGlmICghcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yV2hlZWxFdmVudCkpCisgICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpICE9IFdoZWVs
RXZlbnRJbnRlcmZhY2VUeXBlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fc3BpbkJ1
dHRvbk93bmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNr
TGlzdC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
QXVkaW9UcmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw5IEBAIEF1ZGlv
VHJhY2sqIEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQKICAgICByZXR1cm4gMDsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb1RyYWNrTGlzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
CitFdmVudFRhcmdldEludGVyZmFjZSBBdWRpb1RyYWNrTGlzdDo6ZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9U
cmFja0xpc3Q7CisgICAgcmV0dXJuIEF1ZGlvVHJhY2tMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VU
eXBlOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFja0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlv
VHJhY2tMaXN0LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQXVkaW9UcmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxBdWRpb1RyYWNrPik7CiAKICAgICAvLyBF
dmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIEF1ZGlv
VHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1lbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw5ICsxNDcsOSBAQCBUZXh0VHJhY2s6On5UZXh0VHJhY2soKQogICAgIGNs
ZWFyQ2xpZW50KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrOjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFRleHRUcmFjazo6ZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yVGV4dFRyYWNrOworICAgIHJldHVybiBUZXh0VHJhY2tFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFRleHRUcmFjazo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIH0KICAg
ICB2aXJ0dWFsIH5UZXh0VHJhY2soKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFj
ZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgc3RhdGlj
IFRleHRUcmFjayogY2FwdGlvbk1lbnVPZmZJdGVtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NTQsOSArMTE1NCw5IEBAIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gVGV4dFRyYWNrQ3VlOjoK
ICAgICByZXR1cm4gbV9kaXNwbGF5UG9zaXRpb247CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
VGV4dFRyYWNrQ3VlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IFRleHRUcmFja0N1ZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVy
biBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dFRyYWNrQ3VlOworICAgIHJldHVybiBUZXh0
VHJhY2tDdWVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIFRleHRUcmFja0N1ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgaW50IGNhbGN1bGF0ZUNvbXB1
dGVkTGluZVBvc2l0aW9uKCk7CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3Np
dGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHN0ZDo6
cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0Q1NTUG9zaXRpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIzLDkgKzIyMyw5IEBAIGJvb2wgVGV4dFRyYWNrTGlzdDo6Y29udGFpbnMo
VHJhY2tCYXNlKiAKICAgICByZXR1cm4gdHJhY2tzLT5maW5kKHRyYWNrKSAhPSBub3RGb3VuZDsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0VHJhY2tMaXN0OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFRleHRUcmFja0xpc3Q6OmV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRl
eHRUcmFja0xpc3Q7CisgICAgcmV0dXJuIFRleHRUcmFja0xpc3RFdmVudFRhcmdldEludGVyZmFj
ZVR5cGU7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFRyYWNrQmFzZSopIE9WRVJSSURFOwogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNl
TmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBU
ZXh0VHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1lbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgVHJhY2tFdmVudDo6flRyYWNrRXZlbnQoKQog
ewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRyYWNrRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBj
b25zdAorRXZlbnRJbnRlcmZhY2UgVHJhY2tFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVHJhY2tFdmVudDsKKyAgICBy
ZXR1cm4gVHJhY2tFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVHJhY2tFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgVHJhY2tCYXNl
KiB0cmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2suZ2V0KCk7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFRyYWNr
QmFzZSopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0
SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgPSAwOwogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8VHJhY2tMaXN0QmFzZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFRyYWNr
TGlzdEJhc2U+OjpkZXJlZjsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsOSBAQCBsb25nIFZpZGVvVHJhY2tMaXN0Ojpz
ZWxlY3RlZEluZGV4KCkgY29uCiAgICAgcmV0dXJuIC0xOwogfQogCi1jb25zdCBBdG9taWNTdHJp
bmcmIFZpZGVvVHJhY2tMaXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50
ZXJmYWNlIFZpZGVvVHJhY2tMaXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JWaWRlb1RyYWNrTGlzdDsKKyAgICBy
ZXR1cm4gVmlkZW9UcmFja0xpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFw
cGVuZChQYXNzUmVmUHRyPFZpZGVvVHJhY2s+KTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgVmlkZW9UcmFja0xpc3QoSFRNTE1l
ZGlhRWxlbWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01B
cHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDkgKzEwNCw5IEBAIHZv
aWQgRE9NQXBwbGljYXRpb25DYWNoZTo6YWJvcnQoKQogICAgICAgICBjYWNoZUhvc3QtPmFib3J0
KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRE9NQXBwbGljYXRpb25DYWNoZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBET01BcHBsaWNhdGlvbkNhY2hl
OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JET01BcHBsaWNhdGlvbkNhY2hlOworICAgIHJldHVybiBET01BcHBsaWNh
dGlvbkNhY2hlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBET01BcHBsaWNhdGlvbkNhY2hlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihj
YWNoZWQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob2Jzb2xldGUpOwog
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB0b0V2
ZW50VHlwZShBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBpZCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCw5ICs0MjQsOSBAQCBET01X
aW5kb3c6On5ET01XaW5kb3coKQogICAgIHJlbW92ZUFsbEJlZm9yZVVubG9hZEV2ZW50TGlzdGVu
ZXJzKHRoaXMpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERPTVdpbmRvdzo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBET01XaW5kb3c6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckRPTVdpbmRvdzsKKyAgICByZXR1cm4gRE9NV2luZG93RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBl
OwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBET01XaW5kb3c6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyB0aGUg
bmV0d29yayBsb2FkLiBTZWUgYWxzbyBTZWN1cml0eUNvbnRleHQ6OmlzU2VjdXJlVHJhbnNpdGlv
blRvLgogICAgICAgICB2b2lkIGRpZFNlY3VyZVRyYW5zaXRpb25UbyhEb2N1bWVudCopOwogCi0g
ICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBET01XaW5kb3cq
IHRvRE9NV2luZG93KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSw5ICsyMDksOSBAQCB2b2lkIEV2ZW50U291cmNlOjpjbG9zZSgp
CiAgICAgfQogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEV2ZW50U291cmNlOjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIEV2ZW50U291cmNlOjpldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JFdmVudFNvdXJjZTsKKyAgICByZXR1cm4gRXZlbnRTb3VyY2VFdmVudFRhcmdldEludGVyZmFj
ZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEV2ZW50U291cmNlOjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxFdmVudFNvdXJjZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNl
Pjo6ZGVyZWY7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFt
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJ
bnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2UuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsOSBAQCBQ
ZXJmb3JtYW5jZTo6flBlcmZvcm1hbmNlKCkKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBQ
ZXJmb3JtYW5jZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBQ
ZXJmb3JtYW5jZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUGVyZm9ybWFuY2U7CisgICAgcmV0dXJuIFBlcmZvcm1h
bmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBQZXJmb3JtYW5jZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZS5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlcmZvcm1hbmNlPiBjcmVhdGUoRnJhbWUqIGZy
YW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGVyZm9ybWFuY2UoZnJhbWUpKTsgfQogICAgIH5Q
ZXJmb3JtYW5jZSgpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICBQZXJmb3JtYW5jZU5hdmln
YXRpb24qIG5hdmlnYXRpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3Bl
ZWNoSW5wdXRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNo
SW5wdXRFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
ZWVjaElucHV0RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6
CiAKICAgICBTcGVlY2hJbnB1dFJlc3VsdExpc3QqIHJlc3VsdHMoKSBjb25zdCB7IHJldHVybiBt
X3Jlc3VsdHMuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRl
cmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVy
ZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNwZWVjaElucHV0RXZlbnQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsOSArOTIsOSBAQCB2b2lkIFN0b3JhZ2VFdmVudDo6aW5pdFN0b3JhZ2VFdmVudChj
b25zCiAgICAgbV9zdG9yYWdlQXJlYSA9IHN0b3JhZ2VBcmVhOwogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIFN0b3JhZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFj
ZSBTdG9yYWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvclN0b3JhZ2VFdmVudDsKKyAgICByZXR1cm4gU3RvcmFnZUV2
ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBOZWVkZWQgb25jZSB3ZSBzdXBwb3J0IGluaXQ8Ymxh
bms+RXZlbnROUwogICAgIC8vIHZvaWQgaW5pdFN0b3JhZ2VFdmVudE5TKGluIERPTVN0cmluZyBu
YW1lc3BhY2VVUkksIGluIERPTVN0cmluZyB0eXBlQXJnLCBpbiBib29sZWFuIGNhbkJ1YmJsZUFy
ZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCBpbiBET01TdHJpbmcga2V5QXJnLCBpbiBET01T
dHJpbmcgb2xkVmFsdWVBcmcsIGluIERPTVN0cmluZyBuZXdWYWx1ZUFyZywgaW4gRE9NU3RyaW5n
IHVybEFyZywgU3RvcmFnZSBzdG9yYWdlQXJlYUFyZyk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRl
cmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdG9yYWdlRXZl
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDkgKzIxMSw5IEBAIHZvaWQgU1ZHRWxlbWVudElu
c3RhbmNlOjppbnZhbGlkYXRlQWxsSW4KICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTVkdFbGVtZW50SW5zdGFu
Y2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgU1ZHRWxlbWVu
dEluc3RhbmNlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTVkdFbGVtZW50SW5zdGFuY2U7CisgICAgcmV0dXJuIFNW
R0VsZW1lbnRJbnN0YW5jZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogU1ZHRWxlbWVudEluc3RhbmNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgJKHJl
dmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dFBhcmVudE5vZGUoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSkgeyBtX3BhcmVudEluc3Rh
bmNlID0gaW5zdGFuY2U7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRl
cmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHWm9vbUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHWm9vbUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1pvb21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgU1ZHUG9p
bnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjbwogICAgIHJldHVybiBtX25ld1RyYW5z
bGF0ZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTVkdab29tRXZlbnQ6OmludGVyZmFjZU5h
bWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgU1ZHWm9vbUV2ZW50OjpldmVudEludGVyZmFjZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTVkdab29tRXZl
bnQ7CisgICAgcmV0dXJuIFNWR1pvb21FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBTVkdQb2ludCBuZXdUcmFuc2xh
dGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR1pvb21FdmVudCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIERlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlOjp+RGVkaWNhdGVkV28KIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
CitFdmVudFRhcmdldEludGVyZmFjZSBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7CisgICAgcmV0dXJuIERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB2b2lkIERlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGltcG9ydFNj
cmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKIAogICAgICAgICAvLyBFdmVudFRhcmdldAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJ
REU7CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
ICAgIC8vIE5lZWRlZCBmb3IgT2JqZWN0aXZlLUMgYmluZGluZ3MgKHNlZSBidWcgMjg3NzQpLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAkocmV2aXNpb24gMTU2
MjI0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw5ICs4Nyw5IEBAIFNoYXJlZFdvcmtlcjo6flNoYXJlZFdvcmtlcigpCiB7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU2hhcmVkV29ya2VyOjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNoYXJlZFdvcmtlcjo6ZXZlbnRUYXJnZXRJbnRl
cmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU2hh
cmVkV29ya2VyOworICAgIHJldHVybiBTaGFyZWRXb3JrZXJFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvU2hhcmVkV29ya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9TaGFyZWRXb3JrZXIuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQoKSBjb25zdCB7IHJl
dHVybiBtX3BvcnQuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBTaGFyZWRXb3JrZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFy
ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw5ICs3MCw5IEBAIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjp+U2hhcmVkV29ya2VyR2wK
IHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7CisgICAgcmV0dXJu
IFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBT
aGFyZWRXb3JrZXJUaHJlYWQqIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjp0aHJlYWQoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
aAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU2hhcmVkV29ya2VyR2xvYmFsU2Nv
cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgLy8gRXZlbnRU
YXJnZXQKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgICAgIC8vIFNldHRl
cnMvR2V0dGVycyBmb3IgYXR0cmlidXRlcyBpbiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwK
ICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb25uZWN0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCw5
IEBAIFdvcmtlcjo6fldvcmtlcigpCiAgICAgbV9jb250ZXh0UHJveHktPndvcmtlck9iamVjdERl
c3Ryb3llZCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdvcmtlcjo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBXb3JrZXI6OmV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldvcmtl
cjsKKyAgICByZXR1cm4gV29ya2VyRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB2b2lk
IFdvcmtlcjo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgICAgICB2aXJ0dWFsIH5Xb3JrZXIoKTsKIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJ
REU7CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAy
ODc3NCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMDUsOSArMTMwNSw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNvbnRl
eHREZXN0cm95ZWQoKQogICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFhNTEh0dHBSZXF1ZXN0OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFhNTEh0dHBSZXF1ZXN0OjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JY
TUxIdHRwUmVxdWVzdDsKKyAgICByZXR1cm4gWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFhNTEh0dHBSZXF1ZXN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFRpbWVvdXQoKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAK
ICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBsb2FkZWQoKTsgfQog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUoKSBjb25zdCB7IHJldHVybiB0b3RhbCgp
OyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50SW50ZXJmYWNlVHlwZTsg
fQogCiBwcml2YXRlOgogICAgIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpIHsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpY
TUxIdHRwUmVxdWVzdFVwbG8KIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBY
TUxIdHRwUmVxdWVzdFVwbG9hZDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yWE1MSHR0cFJlcXVlc3RVcGxvYWQ7Cisg
ICAgcmV0dXJuIFhNTEh0dHBSZXF1ZXN0VXBsb2FkRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwog
fQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RVcGxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RVcGxvYWQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlcmVmKCkgeyBtX3htbEh0dHBSZXF1
ZXN0LT5kZXJlZigpOyB9CiAgICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1feG1sSHR0cFJlcXVlc3Q7IH0KIAotICAgICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAg
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKIAogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212282</attachid>
            <date>2013-09-21 13:31:20 -0700</date>
            <delta_ts>2013-09-21 13:44:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121751-20130921133119.patch</filename>
            <type>text/plain</type>
            <size>122551</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRXZlbnQgYW5kIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZXMgZG9uJ3QgbmVlZCB0byBiZSBzdG9yZSBhcyBBdG9taWNTdHJpbmdzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb252ZXJ0IHRoZSBFdmVu
dCBhbmQgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIGZyb20gQXRvbWljU3RyaW5n
cyB0byBlbnVtcy4gVGhleQorICAgICAgICBhcmUgbm90IGV4dGVuc2libGUgYW5kIG5vdCBleHBv
c2VkIGFzIFN0cmluZ3MgYW55d2hlcmUuCisKKyAgICAgICAgKiBGaWxlcyBlbGlkZWQgKgorCiAy
MDEzLTA5LTIxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBE
b24ndCBibG9hdCBPYmotQyBiaW5kaW5ncyB3aXRoIGlubGluZWQgYXR0cmlidXRlIHJldHJpZXZh
bC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IGNyZWF0ZShOYXZpZ2F0
b3IqKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwg
Y29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmF0dGVyeU1hbmFnZXI7IH0KKyAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
QmF0dGVyeU1hbmFnZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCiAgICAg
Ym9vbCBjaGFyZ2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVk
aWFLZXlNZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5IEBAIE1l
ZGlhS2V5TWVzc2FnZUV2ZW50Ojp+TWVkaWFLZXlNZXNzYWdlRXYKIHsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBNZWRpYUtleU1lc3NhZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudEludGVyZmFjZSBNZWRpYUtleU1lc3NhZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25z
dAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFLZXlNZXNzYWdl
RXZlbnQ7CisgICAgcmV0dXJuIE1lZGlhS2V5TWVzc2FnZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlNZXNzYWdlRXZlbnQuaAko
cmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9NZWRpYUtleU1lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUtleU1lc3NhZ2VFdmVu
dCh0eXBlLCBpbml0aWFsaXplcikpOwogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVu
dEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgVWludDhB
cnJheSogbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS5nZXQoKTsgfQogICAgIFN0
cmluZyBkZXN0aW5hdGlvblVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25VUkw7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlOZWVk
ZWRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBNZWRpYUtleU5lZWRlZEV2ZW50Ojp+
TWVkaWFLZXlOZWVkZWRFdmVuCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFLZXlO
ZWVkZWRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNZWRpYUtl
eU5lZWRlZEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYUtleU5lZWRlZEV2ZW50OworICAgIHJldHVybiBNZWRp
YUtleU5lZWRlZEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU5l
ZWRlZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlOZWVkZWRFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZWRpYUtleU5lZWRlZEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QgT1ZFUlJJREU7CiAKICAgICBVaW50OEFycmF5KiBpbml0RGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5pdERhdGEuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRp
YUtleVNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksOSArMjE5LDkgQEAgdm9pZCBN
ZWRpYUtleVNlc3Npb246OmFkZEtleVRpbWVyRmlyZWQoVAogICAgIH0KIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBNZWRpYUtleVNlc3Npb246OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgTWVkaWFLZXlTZXNzaW9uOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYUtleVNlc3Np
b247CisgICAgcmV0dXJuIE1lZGlhS2V5U2Vzc2lvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsK
IH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVkaWFLZXlTZXNzaW9uOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uaAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRrZXllcnJvcik7CiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRrZXltZXNzYWdlKTsKIAotICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlk
RmFpbChGaWxlRXJyb3I6OkVycm9yQ29kZSk7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOyB9CiAKICAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjo6cmVmOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAv
LyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Nsb3NlUGVuZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhh
bmRsZXIoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7CiAKICAg
ICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZh
Y2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgdXNpbmcgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAJKHJldmlzaW9uIDE1
NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgSURCVmVyc2lvbkNo
YW5nZUV2ZW50Ojp+SURCVmVyc2lvbkNoYW5nZQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVy
ZmFjZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQlZlcnNpb25DaGFuZ2VFdmVudDsK
KyAgICByZXR1cm4gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQW55PiBvbGRWZXJzaW9uKCkgeyByZXR1cm4gbV9vbGRWZXJzaW9u
OyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkFueT4gbmV3VmVyc2lvbigpIHsgcmV0dXJu
IG1fbmV3VmVyc2lvbjsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVy
ZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJm
YWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSURCVmVyc2lvbkNoYW5nZUV2ZW50KFBhc3NS
ZWZQdHI8SURCQW55PiBvbGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkFueT4gbmV3VmVyc2lvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0RXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIFVJUmVxdWVzdEV2ZW50Ojp+VUlSZXF1ZXN0
RXZlbnQoKQogewogfQogICAgIAotY29uc3QgQXRvbWljU3RyaW5nJiBVSVJlcXVlc3RFdmVudDo6
aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBVSVJlcXVlc3RFdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yVUlSZXF1ZXN0RXZlbnQ7CisgICAgcmV0dXJuIFVJUmVxdWVzdEV2ZW50SW50ZXJmYWNlVHlw
ZTsKIH0KIAogVUlSZXF1ZXN0RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpVSVJlcXVlc3RFdmVudERp
c3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVudD4gZXZlbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0RXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0RXZlbnQuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVz
dEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJvdGVjdGVkOgogICAg
IAogICAgIFVJUmVxdWVzdEV2ZW50KCk7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICAKIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2
ZW50VGFyZ2V0PiBtX3JlY2VpdmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDcsOSArMjA3LDkgQEAgYm9vbCBNZWRpYVNvdXJjZTo6aXNUeXBlU3VwcG9y
dGVkKGNvbnN0IAogICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlh
U291cmNlTUlNRVR5cGUoY29udGVudFR5cGUudHlwZSgpLCBjb2RlY3MpOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhU291cmNlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFy
Z2V0SW50ZXJmYWNlIE1lZGlhU291cmNlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYVNvdXJjZTsKKyAgICBy
ZXR1cm4gTWVkaWFTb3VyY2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNUeXBlU3VwcG9ydGVkKGNvbnN0
IFN0cmluZyYgdHlwZSk7CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6
cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6ZGVyZWY7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZm
ZXIuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw5ICsyMTQsOSBA
QCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBTb3VyY2VCdWZmZXI6OnNjCiAgICAgcmV0dXJuIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIFNvdXJjZUJ1ZmZlcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdl
dEludGVyZmFjZSBTb3VyY2VCdWZmZXI6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNvdXJjZUJ1ZmZlcjsKKyAgICBy
ZXR1cm4gU291cmNlQnVmZmVyRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBFdmVudFRh
cmdldERhdGEqIFNvdXJjZUJ1ZmZlcjo6ZXZlbnRUYXJnZXREYXRhKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8U291cmNlQnVmZmVyPjo6cmVmOwog
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8U291cmNlQnVmZmVyPjo6ZGVyZWY7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlz
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDkg
QEAgdm9pZCBTb3VyY2VCdWZmZXJMaXN0OjpzY2hlZHVsZUV2ZW50KGNvbgogICAgIG1fYXN5bmNF
dmVudFF1ZXVlLmVucXVldWVFdmVudChldmVudC5yZWxlYXNlKCkpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIFNvdXJjZUJ1ZmZlckxpc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgU291cmNlQnVmZmVyTGlzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU291cmNlQnVmZmVy
TGlzdDsKKyAgICByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU291cmNlQnVmZmVyTGlzdDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxTb3VyY2VC
dWZmZXJMaXN0Pjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9XZWJLaXRNZWRpYVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRNZWRpYVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOSArMTk3LDkgQEAgYm9vbCBXZWJLaXRNZWRpYVNv
dXJjZTo6aXNUeXBlU3VwcG9ydGVkKAogICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE1lZGlhU291cmNlTUlNRVR5cGUoY29udGVudFR5cGUudHlwZSgpLCBjb2RlY3MpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYktpdE1lZGlhU291cmNlOjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFdlYktpdE1lZGlhU291cmNlOjpldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JXZWJLaXRNZWRpYVNvdXJjZTsKKyAgICByZXR1cm4gV2ViS2l0TWVkaWFTb3VyY2VFdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1l
ZGlhU291cmNlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNUeXBlU3VwcG9ydGVkKGNvbnN0IFN0
cmluZyYgdHlwZSk7CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6cmVm
OwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6ZGVyZWY7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2Vi
S2l0U291cmNlQnVmZmVyTGlzdC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0U291cmNlQnVmZmVyTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAgdm9pZCBXZWJLaXRTb3VyY2VCdWZmZXJMaXN0Ojpj
cmVhdGVBbmRGaQogICAgIG1fYXN5bmNFdmVudFF1ZXVlLmVucXVldWVFdmVudChldmVudC5yZWxl
YXNlKCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3Q6
OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgV2ViS2l0U291cmNl
QnVmZmVyTGlzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViS2l0U291cmNlQnVmZmVyTGlzdDsKKyAgICByZXR1
cm4gV2ViS2l0U291cmNlQnVmZmVyTGlzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAog
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV2ViS2l0U291cmNlQnVmZmVyTGlzdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRT
b3VyY2VCdWZmZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNpbmcgUmVm
Q291bnRlZDxXZWJLaXRTb3VyY2VCdWZmZXJMaXN0Pjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsOSArMjU3LDkgQEAgdm9pZCBNZWRpYVN0cmVh
bTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRh
cmdldEludGVyZmFjZSBNZWRpYVN0cmVhbTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFTdHJlYW07CisgICAg
cmV0dXJuIE1lZGlhU3RyZWFtRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBNZWRpYVN0cmVhbTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAg
cHVibGljOgogICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogZGVzY3JpcHRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzY3JpcHRvci5nZXQoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNv
dW50ZWQ8TWVkaWFTdHJlYW0+OjpyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1FdmVudC5jcHAJKHJldmlzaW9uIDE1
NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1F
dmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAgTWVkaWFTdHJlYW0qIE1l
ZGlhU3RyZWFtRXZlbnQ6OnN0cmVhbSgpIAogICAgIHJldHVybiBtX3N0cmVhbS5nZXQoKTsKIH0K
IAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbUV2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhU3RyZWFtRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhU3RyZWFt
RXZlbnQ7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgTWVkaWFTdHJl
YW0qIHN0cmVhbSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50
ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1FdmVudCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtVHJhY2suY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQsOSArMTc0LDkgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wKCkKICAgICBtX3N0b3Bw
ZWQgPSB0cnVlOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFTdHJlYW1UcmFj
azo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yTWVkaWFTdHJlYW1UcmFjazsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1U
cmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogTWVkaWFTdHJlYW1UcmFjazo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2suaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDcgQEAgcHVibGljOgogICAgIGJvb2wgZW5kZWQoKSBjb25zdDsKIAogICAgIC8vIEV2ZW50VGFy
Z2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAv
LyBBY3RpdmVET01PYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1UcmFja0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCBNZWRpYVN0
cmVhbVRyYWNrKiBNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6CiAgICAgcmV0dXJuIG1fdHJhY2suZ2V0
KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFja0V2ZW50OjppbnRl
cmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhU3RyZWFtVHJhY2tFdmVudDo6
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yTWVkaWFTdHJlYW1UcmFja0V2ZW50OworICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNr
RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFja0V2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNrKCkg
Y29uc3Q7CiAKICAgICAvLyBFdmVudAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFj
ZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIE1lZGlh
U3RyZWFtVHJhY2tFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEVE1GU2VuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsOSArMTI4LDkgQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpkaWRQbGF5
VG9uZShjb25zdCBTdAogICAgIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChSVENEVE1GVG9uZUNoYW5n
ZUV2ZW50OjpjcmVhdGUodG9uZSkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RUTUZT
ZW5kZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgUlRDRFRN
RlNlbmRlcjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDRFRNRlNlbmRlcjsKKyAgICByZXR1cm4gUlRDRFRNRlNl
bmRlckV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogUlRDRFRNRlNlbmRlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIu
aAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENEVE1GU2VuZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGlj
OgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG9uZWNoYW5nZSk7CiAKICAg
ICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZh
Y2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFj
ZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJS
SURFOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdlRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlRvbmVDaGFuZ2VFdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDRFRNRlRvbmVDaGFuZ2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDkg
KzczLDkgQEAgY29uc3QgU3RyaW5nJiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50Ojp0bwogICAgIHJl
dHVybiBtX3RvbmU7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDRFRNRlRvbmVDaGFuZ2VF
dmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBSVENEVE1GVG9uZUNo
YW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JSVENEVE1GVG9uZUNoYW5nZUV2ZW50OworICAgIHJldHVybiBSVENE
VE1GVG9uZUNoYW5nZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GVG9u
ZUNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GVG9uZUNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlRvbmVDaGFuZ2VFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0
cmluZyYgdG9uZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50
ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUlRDRFRNRlRvbmVDaGFuZ2VFdmVudCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsOSArMjg1LDkgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkRGV0ZWN0RXJyb3IoKQogICAg
IHNjaGVkdWxlRGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBSVENEYXRhQ2hh
bm5lbDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBSVENEYXRh
Q2hhbm5lbDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDRGF0YUNoYW5uZWw7CisgICAgcmV0dXJuIFJUQ0RhdGFD
aGFubmVsRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBSVENEYXRhQ2hhbm5lbDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc3RvcCgpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50
ZWQ8UlRDRGF0YUNoYW5uZWw+OjpyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWxFdmVudC5jcHAJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWxFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDkgQEAgUlRDRGF0
YUNoYW5uZWwqIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNoYQogICAgIHJldHVybiBtX2NoYW5uZWwu
Z2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDRGF0YUNoYW5uZWxFdmVudDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBSVENEYXRhQ2hhbm5lbEV2ZW50Ojpl
dmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JSVENEYXRhQ2hhbm5lbEV2ZW50OworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50
SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bEV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDRGF0YUNoYW5uZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKIAogICAgIFJUQ0RhdGFDaGFubmVsKiBjaGFubmVsKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBSVENEYXRhQ2hhbm5lbEV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2ZW50
LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGVFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYy
LDkgQEAgUlRDSWNlQ2FuZGlkYXRlKiBSVENJY2VDYW5kaWRhdGVFdmVudDo6YwogICAgIHJldHVy
biBtX2NhbmRpZGF0ZS5nZXQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBSVENJY2VDYW5k
aWRhdGVFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBSVENJY2VD
YW5kaWRhdGVFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDSWNlQ2FuZGlkYXRlRXZlbnQ7CisgICAgcmV0dXJuIFJU
Q0ljZUNhbmRpZGF0ZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGVFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKIAogICAgIFJUQ0ljZUNhbmRpZGF0
ZSogY2FuZGlkYXRlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBSVENJY2VDYW5kaWRhdGVFdmVudCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODUsOSArNTg1LDkgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6ZGlkQWRkUmVt
b3RlRGF0YQogICAgIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChSVENEYXRhQ2hhbm5lbEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmRhdGFjaGFubmVsRXZlbnQsIGZhbHNlLCBmYWxzZSwgY2hhbm5l
bC5yZWxlYXNlKCkpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBSVENQZWVyQ29ubmVjdGlv
bjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBSVENQZWVyQ29u
bmVjdGlvbjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDUGVlckNvbm5lY3Rpb247CisgICAgcmV0dXJuIFJUQ1Bl
ZXJDb25uZWN0aW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBSVENQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFJlbW90
ZURhdGFDaGFubmVsKFBhc3NPd25QdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPikgT1ZFUlJJREU7
CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IE9WRVJSSURFOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsOSBAQCBQYXNzUmVm
UHRyPE5vdGlmaWNhdGlvbj4gTm90aWZpY2F0aW9uOjpjCiB9CiAjZW5kaWYKIAotY29uc3QgQXRv
bWljU3RyaW5nJiBOb3RpZmljYXRpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgTm90aWZpY2F0aW9uOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JOb3RpZmljYXRpb247CisgICAg
cmV0dXJuIE5vdGlmaWNhdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogdm9pZCBO
b3RpZmljYXRpb246OnNob3coKSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVk
PE5vdGlmaWNhdGlvbj46OmRlcmVmOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7IH0KIAogICAgIHZvaWQgc3RvcExvYWRpbmdJY29uKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc0V2ZW50LmgJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpc0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIGZsb2F0IGVsYXBzZWRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9lbGFwc2VkVGltZTsg
fQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAg
IAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Qg
eyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNwZWVjaFN5bnRoZXNpc0V2ZW50OyB9
CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuIFNwZWVjaFN5bnRoZXNpc0V2ZW50SW50ZXJmYWNlVHlwZTsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBTcGVlY2hTeW50aGVzaXNFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIFNwZWVjaFN5bnRoZXNpc1UKICAgICByZXR1cm4gQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0gICAgCiAg
ICAgCi1jb25zdCBBdG9taWNTdHJpbmcmIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBTcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvclNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTsKKyAgICByZXR1cm4g
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBT
cGVlY2hTeW50aGVzaXNWb2ljZSogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjp2b2ljZSgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBFdmVudFRhcmdldAogICAg
IEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgcmVmKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgZGVyZWYo
KTsgfQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBPVkVS
UklERSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUwLDkgKzk1MCw5IEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpwcm9j
ZXNzQXV0b21hdGljUHVsbE4KICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXNb
aV0tPnByb2Nlc3NJZk5lY2Vzc2FyeShmcmFtZXNUb1Byb2Nlc3MpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdl
dEludGVyZmFjZSBBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvQ29udGV4dDsKKyAgICBy
ZXR1cm4gQXVkaW9Db250ZXh0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9uKEF1ZGlvU3VtbWluZ0p1
bmN0aW9uKik7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7IH0KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSYgZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkgeyByZXR1cm4gbV9ldmVudFRhcmdldERhdGE7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw5IEBAIHZvaWQgQXVkaW9Ob2RlOjp1cGRhdGVDaGFu
bmVsc0ZvcklucHV0cygKICAgICAgICAgaW5wdXQoaSktPmNoYW5nZWRPdXRwdXRzKCk7CiB9CiAK
LWNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9Ob2RlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50VGFyZ2V0SW50ZXJmYWNlIEF1ZGlvTm9kZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Ob2RlOworICAg
IHJldHVybiBBdWRpb05vZGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIEF1ZGlvTm9kZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgJKHJl
dmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJsaWM6CiAgICAgQXVk
aW9CdXM6OkNoYW5uZWxJbnRlcnByZXRhdGlvbiBpbnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbEludGVycHJldGF0aW9uOyB9CiAKICAgICAvLyBF
dmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBPVkVSUklERSB7
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0
YSYgZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9ldmVudFRhcmdl
dERhdGE7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6fkF1ZGlv
UHJvY2Vzc2luZ0V2CiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9Qcm9jZXNzaW5n
RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQXVkaW9Qcm9jZXNz
aW5nRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvckF1ZGlvUHJvY2Vzc2luZ0V2ZW50OworICAgIHJldHVybiBBdWRpb1By
b2Nlc3NpbmdFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
UHJvY2Vzc2luZ0V2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyKCkgeyBy
ZXR1cm4gbV9pbnB1dEJ1ZmZlci5nZXQoKTsgfQogICAgIEF1ZGlvQnVmZmVyKiBvdXRwdXRCdWZm
ZXIoKSB7IHJldHVybiBtX291dHB1dEJ1ZmZlci5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50
SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQXVkaW9Q
cm9jZXNzaW5nRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAJKHJl
dmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBA
QCBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6On5PZmZsaW5lQXVkCiB7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OworICAgIHJldHVybiBPZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgQXVkaW9C
dWZmZXIqIHJlbmRlcmVkQnVmZmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlZEJ1ZmZlci5nZXQoKTsg
fQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9DbG9zZUV2ZW50LmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9DbG9zZUV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBy
ZWFzb24oKSBjb25zdCB7IHJldHVybiBtX3JlYXNvbjsgfQogCiAgICAgLy8gRXZlbnQgZnVuY3Rp
b24uCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQ2xvc2VFdmVudDsg
fQorICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBDbG9zZUV2ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAg
IENsb3NlRXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDgsOSAr
NDQ4LDkgQEAgdm9pZCBXZWJTb2NrZXQ6OnNldEJpbmFyeVR5cGUoY29uc3QgU3RyaQogICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIiciICsgYmluYXJ5VHlwZSArICInIGlzIG5vdCBhIHZhbGlk
IHZhbHVlIGZvciBiaW5hcnlUeXBlOyBiaW5hcnlUeXBlIHJlbWFpbnMgdW5jaGFuZ2VkLiIpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlNvY2tldDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
CitFdmVudFRhcmdldEludGVyZmFjZSBXZWJTb2NrZXQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYlNvY2tldDsK
KyAgICByZXR1cm4gV2ViU29ja2V0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNsb3NlKTsKIAogICAgIC8vIEV2
ZW50VGFyZ2V0IGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRl
cmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBP
VkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6cmVmOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw4IEBAIEpTRXJyb3JIYW5kbGVyOjp+SlNF
cnJvckhhbmRsZXIoKQogCiB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7
Ci0gICAgaWYgKCFldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JF
cnJvckV2ZW50KSkKKworICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSAhPSBFcnJvckV2
ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxl
RXZlbnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZXZlbnQpOwogCiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIEpTVmFsdWUgSlNFdmVudDo6Y2xpcGJvYXJkRGF0YShFeGVjU3RhdGUKIH0KIAogI2RlZmlu
ZSBUUllfVE9fV1JBUF9XSVRIX0lOVEVSRkFDRShpbnRlcmZhY2VOYW1lKSBcCi0gICAgaWYgKGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3IjI2ludGVyZmFjZU5hbWUgPT0gZGVzaXJlZEludGVyZmFj
ZSkgXAorICAgIGNhc2UgaW50ZXJmYWNlTmFtZSMjSW50ZXJmYWNlVHlwZTogXAogICAgICAgICBy
ZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW50ZXJmYWNlTmFt
ZSwgZXZlbnQpOwogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFdmVudCogZXZlbnQpCkBAIC02Myw4ICs2Myw5IEBAIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAod3JhcHBlcikKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKLSAgICBTdHJpbmcgZGVzaXJlZEludGVyZmFjZSA9IGV2
ZW50LT5pbnRlcmZhY2VOYW1lKCk7Ci0gICAgRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0go
VFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UpCisgICAgc3dpdGNoIChldmVudC0+ZXZlbnRJbnRl
cmZhY2UoKSkgeworICAgICAgICBET01fRVZFTlRfSU5URVJGQUNFU19GT1JfRUFDSChUUllfVE9f
V1JBUF9XSVRIX0lOVEVSRkFDRSkKKyAgICB9CiAKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQ
UEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgRXZlbnQsIGV2ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFRSWV9UT19XUkFQX1dJVEhf
SU5URVJGQUNFKGludGVyZmFjZU5hbWUpIFwKLSAgICBpZiAoZXZlbnROYW1lcygpLmludGVyZmFj
ZUZvciMjaW50ZXJmYWNlTmFtZSA9PSBkZXNpcmVkSW50ZXJmYWNlKSBcCisgICAgY2FzZSBpbnRl
cmZhY2VOYW1lIyNFdmVudFRhcmdldEludGVyZmFjZVR5cGU6IFwKICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnRlcmZhY2VOYW1lKj4odGFyZ2V0
KSk7CiAKIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCkBAIC00NCwxOSArNDQsOSBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCF0YXJnZXQpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEF0b21pY1N0cmluZyBkZXNpcmVkSW50ZXJm
YWNlID0gdGFyZ2V0LT5pbnRlcmZhY2VOYW1lKCk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGNhbid0
IHdlIHVzZSB0b0pTIGZvciB0aGVzZSBjYXNlcz8KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBp
ZiAoZXZlbnROYW1lcygpLmludGVyZmFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID09
IGRlc2lyZWRJbnRlcmZhY2UpCi0gICAgICAgIHJldHVybiB0b0pTRE9NR2xvYmFsT2JqZWN0KHN0
YXRpY19jYXN0PERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKj4odGFyZ2V0KSwgZXhlYyk7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgaWYgKGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9PSBkZXNpcmVkSW50ZXJmYWNlKQot
ICAgICAgICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChzdGF0aWNfY2FzdDxTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZSo+KHRhcmdldCksIGV4ZWMpOwotI2VuZGlmCi0KKyAgICBzd2l0Y2ggKHRh
cmdldC0+ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSkgewogICAgIERPTV9FVkVOVF9UQVJHRVRfSU5U
RVJGQUNFU19GT1JfRUFDSChUUllfVE9fV1JBUF9XSVRIX0lOVEVSRkFDRSkKKyAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUV2ZW50cy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUV2ZW50cy5tbQkocmV2aXNpb24gMTU2MjI0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01FdmVudHMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDIxICs0OSwyNSBAQCBDbGFzcyBraXRDbGFzcyhXZWJDb3JlOjpFdmVudCogaW1w
bCkKICAgICAgICAgICAgIHJldHVybiBbRE9NS2V5Ym9hcmRFdmVudCBjbGFzc107CiAgICAgICAg
IGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgICAgIHJldHVybiBbRE9NTW91c2VF
dmVudCBjbGFzc107Ci0gICAgICAgIGlmIChpbXBsLT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygp
LmludGVyZmFjZUZvclRleHRFdmVudCkpCisKKyAgICAgICAgV2ViQ29yZTo6RXZlbnRJbnRlcmZh
Y2UgZGVzaXJlZEludGVyZmFjZSA9IGltcGwtPmV2ZW50SW50ZXJmYWNlKCk7CisgICAgICAgIGlm
IChkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6OlRleHRFdmVudEludGVyZmFjZVR5cGUpCiAg
ICAgICAgICAgICByZXR1cm4gW0RPTVRleHRFdmVudCBjbGFzc107Ci0gICAgICAgIGlmIChpbXBs
LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIFtET01XaGVlbEV2ZW50IGNsYXNzXTsgICAgICAgIAorICAgICAgICBp
ZiAoZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBbRE9NV2hlZWxFdmVudCBjbGFzc107CiAgICAgICAgIHJldHVy
biBbRE9NVUlFdmVudCBjbGFzc107CiAgICAgfQotICAgIGlmIChpbXBsLT5oYXNJbnRlcmZhY2Uo
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvck11dGF0aW9uRXZlbnQpKQorCisgICAgV2ViQ29yZTo6
RXZlbnRJbnRlcmZhY2UgZGVzaXJlZEludGVyZmFjZSA9IGltcGwtPmV2ZW50SW50ZXJmYWNlKCk7
CisgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6TXV0YXRpb25FdmVudEludGVy
ZmFjZVR5cGUpCiAgICAgICAgIHJldHVybiBbRE9NTXV0YXRpb25FdmVudCBjbGFzc107Ci0gICAg
aWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yT3ZlcmZsb3dF
dmVudCkpCisgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6T3ZlcmZsb3dFdmVu
dEludGVyZmFjZVR5cGUpCiAgICAgICAgIHJldHVybiBbRE9NT3ZlcmZsb3dFdmVudCBjbGFzc107
Ci0gICAgaWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVz
c2FnZUV2ZW50KSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpNZXNzYWdl
RXZlbnRJbnRlcmZhY2VUeXBlKQogICAgICAgICByZXR1cm4gW0RPTU1lc3NhZ2VFdmVudCBjbGFz
c107Ci0gICAgaWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9y
UHJvZ3Jlc3NFdmVudCkgfHwgaW1wbC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQpKQorICAgIGlmIChkZXNpcmVkSW50ZXJm
YWNlID09IFdlYkNvcmU6OlByb2dyZXNzRXZlbnRJbnRlcmZhY2VUeXBlIHx8IGRlc2lyZWRJbnRl
cmZhY2UgPT0gV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50SW50ZXJmYWNlVHlw
ZSkKICAgICAgICAgcmV0dXJuIFtET01Qcm9ncmVzc0V2ZW50IGNsYXNzXTsKLSAgICBpZiAoaW1w
bC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVMb2FkRXZlbnQp
KQorICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6OkJlZm9yZUxvYWRFdmVudElu
dGVyZmFjZVR5cGUpCiAgICAgICAgIHJldHVybiBbRE9NQmVmb3JlTG9hZEV2ZW50IGNsYXNzXTsK
ICAgICByZXR1cm4gW0RPTUV2ZW50IGNsYXNzXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZUxvYWRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsOSArNTcsOSBAQCBDU1NGb250RmFjZUxvYWRFdmVudDo6fkNTU0ZvbnRGYWNlTG9hZEV2CiB7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ1NTRm9udEZhY2VMb2FkRXZlbnQ6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQ1NTRm9udEZhY2VMb2FkRXZlbnQ6OmV2ZW50
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckNTU0ZvbnRGYWNlTG9hZEV2ZW50OworICAgIHJldHVybiBDU1NGb250RmFjZUxvYWRFdmVudElu
dGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZUxvYWRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZUxvYWRFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VMb2FkRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlKiBmb250ZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udGZhY2UuZ2V0KCk7IH0KICAgICBET01FcnJvciogZXJyb3Io
KSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRl
cmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDU1NGb250RmFj
ZUxvYWRFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5oCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGxvYWRpbmcoKSBjb25zdCB7IHJldHVy
biBtX2xvYWRpbmdDb3VudCA+IDA7IH0KIAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgdXNpbmcg
UmVmQ291bnRlZDxGb250TG9hZGVyPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8Rm9udExv
YWRlcj46OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmlu
ZyYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvckJlZm9yZUxvYWRFdmVudDsgfQorICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBCZWZvcmVMb2FkRXZlbnRJbnRlcmZhY2VU
eXBlOyB9CiAKIHByaXZhdGU6CiAgICAgQmVmb3JlTG9hZEV2ZW50KCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2
MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBAIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
Ojp+QmVmb3JlVGV4dEluc2UKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewogICAgIC8vIE5v
dGljZSB0aGF0IHRoZXJlIGlzIG5vIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmlkbC4KLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckV2ZW50OworICAgIHJldHVybiBFdmVudElu
dGVyZmFjZVR5cGU7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQodGV4dCkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVm
b3JlVW5sb2FkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3Jl
VW5sb2FkRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Jl
Zm9yZVVubG9hZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyByZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVmFsdWU7
IH0KICAgICB2b2lkIHNldFJldHVyblZhbHVlKGNvbnN0IFN0cmluZyYgcmV0dXJuVmFsdWUpIHsg
bV9yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVVbmxvYWRFdmVudDsgfQorICAgIHZpcnR1YWwgRXZlbnRJ
bnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBCZWZvcmVV
bmxvYWRFdmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBCZWZvcmVVbmxvYWRF
dmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCShyZXZpc2lv
biAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgQ2xpcGJvYXJkRXZlbnQ6On5DbGlwYm9hcmRF
dmVudCgpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ2xpcGJvYXJkRXZlbnQ6OmludGVy
ZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQ2xpcGJvYXJkRXZlbnQ6OmV2ZW50SW50
ZXJmYWNlKCkgY29uc3QKIHsKICAgICAvLyBOb3RpY2UgdGhhdCB0aGVyZSBpcyBubyBDbGlwYm9h
cmRFdmVudC5pZGwuCi0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JFdmVudDsK
KyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIENsaXBib2FyZEV2ZW50
Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlw
Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmRF
dmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJk
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIENsaXBib2FyZEV2ZW50KCk7CiAgICAgICAgIENsaXBib2FyZEV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJs
ZUFyZywgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+KTsKIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgICAgICB2aXJ0
dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICAgICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zaXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0NvbXBvc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDkgKzY1
LDkgQEAgdm9pZCBDb21wb3NpdGlvbkV2ZW50Ojppbml0Q29tcG9zaXRpb25FdgogICAgIG1fZGF0
YSA9IGRhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ29tcG9zaXRpb25FdmVudDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBDb21wb3NpdGlvbkV2ZW50OjpldmVu
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JDb21wb3NpdGlvbkV2ZW50OworICAgIHJldHVybiBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNl
VHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29tcG9zaXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQ29tcG9zaXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBDb21wb3NpdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAgdm9pZCBDdXN0b21FdmVudDo6
aW5pdEN1c3RvbUV2ZW50KGNvbnN0IAogICAgIG1fZGV0YWlsID0gZGV0YWlsOwogfQogCi1jb25z
dCBBdG9taWNTdHJpbmcmIEN1c3RvbUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
SW50ZXJmYWNlIEN1c3RvbUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDdXN0b21FdmVudDsKKyAgICByZXR1cm4gQ3Vz
dG9tRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBpbml0Q3VzdG9tRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTY3JpcHRWYWx1ZSYg
ZGV0YWlsKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OwogCiAgICAgY29uc3QgU2NyaXB0VmFsdWUmIGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGV0YWlsOyB9CiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSgpIHsgcmV0dXJuIG1fc2VyaWFsaXplZFNjcmlwdFZhbHVlOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDE1ICs1NSwxNSBAQCB2b2lkIERldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2
aWNlTW90aW9uCiAgICAgbV9kZXZpY2VNb3Rpb25EYXRhID0gZGV2aWNlTW90aW9uRGF0YTsKIH0K
IAotY29uc3QgQXRvbWljU3RyaW5nJiBEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBEZXZpY2VNb3Rpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JEZXZpY2VNb3Rpb25FdmVudDsKKyAgICByZXR1cm4gRGV2
aWNlTW90aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogI2Vsc2UKICAgICAvLyBGSVhNRTogRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikgc2VlbXMgdG8gYmUgaW4gYSBzdHJhbmdlIHN0YXRlIHdoZXJl
CiAgICAgLy8gaXQgaXMgaGFsZi1ndWFyZGVkIGJ5ICNpZmRlZnMuIERldmljZU1vdGlvbkV2ZW50
LmlkbCBpcyBndWFyZGVkCiAgICAgLy8gYnV0IERldmljZU1vdGlvbkV2ZW50LmNwcCBpdHNlbGYg
aXMgcmVxdWlyZWQgYnkgdW5nYXJkZWQgY29kZS4KLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvckV2ZW50OworICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5cGU7CiAjZW5kaWYK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkV2ZW50LmgJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIERldmljZU1vdGlvbkRh
dGEqIGRldmljZU1vdGlvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RldmljZU1vdGlvbkRhdGEu
Z2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIERldmljZU1vdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDE1ICs1NSwxNSBAQCB2b2lkIERldmljZU9yaWVudGF0aW9uRXZl
bnQ6OmluaXREZXZpY2VPCiAgICAgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUo
KSBjb25zdAorRXZlbnRJbnRlcmZhY2UgRGV2aWNlT3JpZW50YXRpb25FdmVudDo6ZXZlbnRJbnRl
cmZhY2UoKSBjb25zdAogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JEZXZpY2VPcmllbnRhdGlvbkV2ZW50OworICAg
IHJldHVybiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKICNlbHNlCiAgICAg
Ly8gRklYTUU6IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pIHNlZW1zIHRvIGJlIGluIGEgc3Ry
YW5nZSBzdGF0ZSB3aGVyZQogICAgIC8vIGl0IGlzIGhhbGYtZ3VhcmRlZCBieSAjaWZkZWZzLiBE
ZXZpY2VPcmllbnRhdGlvbkV2ZW50LmlkbCBpcyBndWFyZGVkCiAgICAgLy8gYnV0IERldmljZU9y
aWVudGF0aW9uRXZlbnQuY3BwIGl0c2VsZiBpcyByZXF1aXJlZCBieSB1bmdhcmRlZCBjb2RlLgot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQ7CisgICAgcmV0dXJuIEV2
ZW50SW50ZXJmYWNlVHlwZTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RGV2aWNlT3JpZW50YXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EZXZpY2VPcmllbnRhdGlvbkV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgRGV2aWNlT3JpZW50YXRpb25EYXRhKiBvcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb24uZ2V0KCk7IH0KIAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IERldmljZU9yaWVudGF0aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJv
ckV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5j
cHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOSBAQCBFcnJvckV2ZW50Ojp+RXJyb3JFdmVu
dCgpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRXJyb3JFdmVudDo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBFcnJvckV2ZW50OjpldmVudEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JFcnJvckV2ZW50Owor
ICAgIHJldHVybiBFcnJvckV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsaW5lbm8oKSBjb25zdCB7IHJldHVybiBt
X2xpbmVOdW1iZXI7IH0KICAgICB1bnNpZ25lZCBjb2xubygpIGNvbnN0IHsgcmV0dXJuIG1fY29s
dW1uTnVtYmVyOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNl
TmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBFcnJvckV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwxNCArMTIxLDkgQEAgdm9pZCBFdmVudDo6aW5pdEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZwogICAgIG1fY2FuY2VsYWJsZSA9IGNhbmNlbGFibGVBcmc7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvckV2ZW50OwotfQotCi1ib29sIEV2ZW50OjpoYXNJbnRl
cmZhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIHJldHVybiBpbnRl
cmZhY2VOYW1lKCkgPT0gbmFtZTsKKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogfQog
CiBib29sIEV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEV2ZW50X2gKIAogI2luY2x1ZGUgIkRPTVRpbWVT
dGFtcC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudEludGVyZmFj
ZXMuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNDcsNiArNDcsMTQgQEAgc3Ry
dWN0IEV2ZW50SW5pdCB7CiAgICAgYm9vbCBjYW5jZWxhYmxlOwogfTsKIAorZW51bSBFdmVudElu
dGVyZmFjZSB7CisKKyNkZWZpbmUgRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKG5hbWUpIG5h
bWUjI0ludGVyZmFjZVR5cGUsCitET01fRVZFTlRfSU5URVJGQUNFU19GT1JfRUFDSChET01fRVZF
TlRfSU5URVJGQUNFX0RFQ0xBUkUpCisjdW5kZWYgRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJF
CisKK307CisKIGNsYXNzIEV2ZW50IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJl
ZkNvdW50ZWQ8RXZlbnQ+IHsKIHB1YmxpYzoKICAgICBlbnVtIFBoYXNlVHlwZSB7IApAQCAtMTIw
LDggKzEyOCw3IEBAIHB1YmxpYzoKIAogICAgIENsaXBib2FyZCogY2xpcGJvYXJkRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIGlzQ2xpcGJvYXJkRXZlbnQoKSA/IGNsaXBib2FyZCgpIDogMDsgfQogCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAg
ICBib29sIGhhc0ludGVyZmFjZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICAvLyBUaGVz
ZSBldmVudHMgYXJlIGdlbmVyYWwgY2xhc3NlcyBvZiBldmVudHMuCiAgICAgdmlydHVhbCBib29s
IGlzVUlFdmVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZGVmaW5l
IElOSVRJQUxJWkVfRVZFTlRfTkFNRShuYW1lKSBcCiAgICAgLCBuYW1lIyNFdmVudCgjbmFtZSwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKIAotI2RlZmluZSBJTklUSUFMSVpF
X0VWRU5UX0lOVEVSRkFDRShuYW1lKSBcCi0gICAgLCBpbnRlcmZhY2VGb3IjI25hbWUoI25hbWUs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0KIEV2ZW50TmFtZXM6OkV2ZW50
TmFtZXMoKQogICAgIDogZHVtbXkoMCkKLURPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChJTklUSUFM
SVpFX0VWRU5UX05BTUUpCi1ET01fRVZFTlRfSU5URVJGQUNFU19GT1JfRUFDSChJTklUSUFMSVpF
X0VWRU5UX0lOVEVSRkFDRSkKLURPTV9FVkVOVF9UQVJHRVRfSU5URVJGQUNFU19GT1JfRUFDSChJ
TklUSUFMSVpFX0VWRU5UX0lOVEVSRkFDRSkKKyAgICBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0go
SU5JVElBTElaRV9FVkVOVF9OQU1FKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDYgQEAKICNpZm5kZWYgRXZlbnROYW1lc19oCiAj
ZGVmaW5lIEV2ZW50TmFtZXNfaAogCi0jaW5jbHVkZSAiRXZlbnRJbnRlcmZhY2VzLmgiCi0jaW5j
bHVkZSAiRXZlbnRUYXJnZXRJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBAIC0yNjgsNTcgKzI2
Niw0MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNf
Rk9SX0VBQ0gKIAotICAgIGNsYXNzIEV2ZW50TmFtZXMgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShFdmVudE5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgICAgIGlu
dCBkdW1teTsgLy8gTmVlZGVkIHRvIG1ha2UgaW5pdGlhbGl6YXRpb24gbWFjcm8gd29yay4KLSAg
ICAgICAgLy8gUHJpdmF0ZSB0byBwcmV2ZW50IGFjY2lkZW50YWwgY2FsbCB0byBFdmVudE5hbWVz
KCkgaW5zdGVhZCBvZiBldmVudE5hbWVzKCkKLSAgICAgICAgRXZlbnROYW1lcygpOwotICAgICAg
ICBmcmllbmQgY2xhc3MgVGhyZWFkR2xvYmFsRGF0YTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAg
I2RlZmluZSBET01fRVZFTlRfTkFNRVNfREVDTEFSRShuYW1lKSBBdG9taWNTdHJpbmcgbmFtZSMj
RXZlbnQ7Ci0gICAgICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChET01fRVZFTlRfTkFNRVNf
REVDTEFSRSkKLSAgICAgICAgI3VuZGVmIERPTV9FVkVOVF9OQU1FU19ERUNMQVJFCi0KLSAgICAg
ICAgI2RlZmluZSBET01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5n
IGludGVyZmFjZUZvciMjbmFtZTsKLSAgICAgICAgRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VB
Q0goRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKQotICAgICAgICBET01fRVZFTlRfVEFSR0VU
X0lOVEVSRkFDRVNfRk9SX0VBQ0goRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKQotICAgICAg
ICAjdW5kZWYgRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFCi0KLSAgICAgICAgaW5saW5lIGJv
b2wgaXNUb3VjaEV2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSB0b3VjaHN0YXJ0RXZl
bnQKLSAgICAgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2htb3ZlRXZlbnQKLSAgICAg
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2hlbmRFdmVudAotICAgICAgICAgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSB0b3VjaGNhbmNlbEV2ZW50OwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIGJvb2wgaXNHZXN0dXJlRXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXZlbnRUeXBlID09IGdl
c3R1cmV0YXBFdmVudAotICAgICAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJldGFw
ZG93bkV2ZW50Ci0gICAgICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGdlc3R1cmVzY3JvbGxz
dGFydEV2ZW50Ci0gICAgICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGdlc3R1cmVzY3JvbGxl
bmRFdmVudAotICAgICAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsdXBk
YXRlRXZlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b3Vj
aEV2ZW50TmFtZXMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nPiBuYW1lczsKLSAgICAgICAgICAgIG5hbWVzLnJlc2VydmVDYXBhY2l0eSg0KTsKLSAg
ICAgICAgICAgIG5hbWVzLmFwcGVuZCh0b3VjaHN0YXJ0RXZlbnQpOwotICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKHRvdWNobW92ZUV2ZW50KTsKLSAgICAgICAgICAgIG5hbWVzLmFwcGVuZCh0b3Vj
aGVuZEV2ZW50KTsKLSAgICAgICAgICAgIG5hbWVzLmFwcGVuZCh0b3VjaGNhbmNlbEV2ZW50KTsK
LSAgICAgICAgICAgIHJldHVybiBuYW1lczsKLSAgICAgICAgfQotICAgIH07CitjbGFzcyBFdmVu
dE5hbWVzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudE5hbWVzKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgaW50IGR1bW15OyAvLyBOZWVkZWQgdG8gbWFrZSBpbml0aWFs
aXphdGlvbiBtYWNybyB3b3JrLgorICAgIC8vIFByaXZhdGUgdG8gcHJldmVudCBhY2NpZGVudGFs
IGNhbGwgdG8gRXZlbnROYW1lcygpIGluc3RlYWQgb2YgZXZlbnROYW1lcygpCisgICAgRXZlbnRO
YW1lcygpOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRHbG9iYWxEYXRhOworCitwdWJsaWM6Cisg
ICAgI2RlZmluZSBET01fRVZFTlRfTkFNRVNfREVDTEFSRShuYW1lKSBBdG9taWNTdHJpbmcgbmFt
ZSMjRXZlbnQ7CisgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1FU19E
RUNMQVJFKQorICAgICN1bmRlZiBET01fRVZFTlRfTkFNRVNfREVDTEFSRQogCi0gICAgaW5saW5l
IEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMoKQorICAgIGlubGluZSBib29sIGlzVG91Y2hFdmVudFR5
cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmV2ZW50TmFtZXMoKTsKKyAgICAgICAgcmV0dXJuIGV2
ZW50VHlwZSA9PSB0b3VjaHN0YXJ0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSB0
b3VjaG1vdmVFdmVudAorICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IHRvdWNoZW5kRXZlbnQK
KyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSB0b3VjaGNhbmNlbEV2ZW50OwogICAgIH0KIAor
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvdWNoRXZlbnROYW1lcygpIGNvbnN0CisgICAgewor
ICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBuYW1lczsKKyAgICAgICAgbmFtZXMucmVzZXJ2
ZUNhcGFjaXR5KDQpOworICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hzdGFydEV2ZW50KTsKKyAg
ICAgICAgbmFtZXMuYXBwZW5kKHRvdWNobW92ZUV2ZW50KTsKKyAgICAgICAgbmFtZXMuYXBwZW5k
KHRvdWNoZW5kRXZlbnQpOworICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hjYW5jZWxFdmVudCk7
CisgICAgICAgIHJldHVybiBuYW1lczsKKyAgICB9Cit9OworCitpbmxpbmUgRXZlbnROYW1lcyYg
ZXZlbnROYW1lcygpCit7CisgICAgcmV0dXJuIHRocmVhZEdsb2JhbERhdGEoKS5ldmVudE5hbWVz
KCk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJNYXAu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXRJbnRlcmZh
Y2VzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KQEAgLTk5LDEyICsxMDAs
MjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8RmlyaW5nRXZlbnRJdGVy
YXRvclZlY3Rvcj4gZmlyaW5nRXZlbnRJdGVyYXRvcnM7CiAgICAgfTsKIAorICAgIGVudW0gRXZl
bnRUYXJnZXRJbnRlcmZhY2UgeworCisgICAgI2RlZmluZSBET01fRVZFTlRfSU5URVJGQUNFX0RF
Q0xBUkUobmFtZSkgbmFtZSMjRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlLAorICAgIERPTV9FVkVO
VF9UQVJHRVRfSU5URVJGQUNFU19GT1JfRUFDSChET01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUp
CisgICAgI3VuZGVmIERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRQorCisgICAgfTsKKwogICAg
IGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcmVmKCkgeyBy
ZWZFdmVudFRhcmdldCgpOyB9CiAgICAgICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRXZlbnRUYXJn
ZXQoKTsgfQogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAg
ICAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9G
b2N1c0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBGb2N1c0V2ZW50SW5pdDo6Rm9j
dXNFdmVudEluaXQoKQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEZvY3VzRXZlbnQ6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgRm9jdXNFdmVudDo6ZXZlbnRJbnRl
cmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRm9j
dXNFdmVudDsKKyAgICByZXR1cm4gRm9jdXNFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wg
Rm9jdXNFdmVudDo6aXNGb2N1c0V2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Gb2N1c0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZl
bnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJn
ZXQqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCk7
IH0KICAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCkgeyBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0OyB9CiAKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNGb2N1c0V2ZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vR2VzdHVyZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vR2VzdHVyZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0dlc3R1cmVFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxMCBAQCB2
b2lkIEdlc3R1cmVFdmVudDo6aW5pdEdlc3R1cmVFdmVudChjb25zCiAgICAgaW5pdENvb3JkaW5h
dGVzKEludFBvaW50KGNsaWVudFgsIGNsaWVudFkpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBHZXN0dXJlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgR2Vz
dHVyZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiVEJESW50ZXJmYWNlIikpOwotICAgIHJldHVybiBu
YW1lOworICAgIC8vIEZJWE1FOiBUaGlzIG1ha2VzIGl0IHNvIHdlIG5ldmVyIHdyYXAgR2VzdHVy
ZUV2ZW50cyBpbiB0aGUgcmlnaHQgYmluZGluZ3MuCisgICAgcmV0dXJuIEV2ZW50SW50ZXJmYWNl
VHlwZTsKIH0KIAogR2VzdHVyZUV2ZW50OjpHZXN0dXJlRXZlbnQoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0dlc3R1cmVFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9HZXN0dXJlRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0dlc3R1cmVFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgaW5pdEdlc3R1cmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xp
ZW50WCwgaW50IGNsaWVudFksIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRL
ZXksIGJvb2wgbWV0YUtleSwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpOwogCi0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBmbG9hdCBk
ZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsdGFZOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENo
YW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VF
dmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5n
ZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFN0cmluZyYgb2xkVVJMKCkgY29uc3QgeyByZXR1cm4gbV9vbGRVUkw7IH0KICAgICBjb25z
dCBTdHJpbmcmIG5ld1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV3VVJMOyB9CiAKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JIYXNoQ2hhbmdlRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2
ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gSGFzaENoYW5nZUV2
ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hDaGFuZ2VFdmVudCgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OCw5ICsxODgsOSBAQCBpbnQgS2V5Ym9hcmRFdmVudDo6Y2hhckNvZGUoKSBjb25zdAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRleHQuY2hhcmFjdGVyU3RhcnRpbmdBdCgwKSk7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgS2V5Ym9hcmRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0CitFdmVudEludGVyZmFjZSBLZXlib2FyZEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JLZXlib2FyZEV2ZW50Owor
ICAgIHJldHVybiBLZXlib2FyZEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBLZXlib2Fy
ZEV2ZW50Ojppc0tleWJvYXJkRXZlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0tleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9h
cmRFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9h
cmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAg
IGludCBrZXlDb2RlKCkgY29uc3Q7IC8vIGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBrZXl1cCwg
Y2hhcmFjdGVyIGZvciBrZXlwcmVzcwogICAgIGludCBjaGFyQ29kZSgpIGNvbnN0OyAvLyBjaGFy
YWN0ZXIgY29kZSBmb3Iga2V5cHJlc3MsIDAgZm9yIGtleWRvd24gYW5kIGtleXVwCiAKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBj
b25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDE1
NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjYsOSArMTY2LDkgQEAgdm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZl
bnQoY29ucwogICAgIGluaXRNZXNzYWdlRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxl
LCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzLnJlbGVhc2UoKSk7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVzc2FnZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29u
c3QKK0V2ZW50SW50ZXJmYWNlIE1lc3NhZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVzc2FnZUV2ZW50OworICAg
IHJldHVybiBNZXNzYWdlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCgpOwog
ICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJ
ZCwgRE9NV2luZG93KiBzb3VyY2UsIE1lc3NhZ2VQb3J0Kik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJ
bnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIGVudW0gRGF0YVR5cGUgewog
ICAgICAgICBEYXRhVHlwZVNjcmlwdFZhbHVlLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsOSArMTUxLDkgQEAgdm9pZCBNZXNzYWdlUG9y
dDo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZXNzYWdlUG9ydDo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0CitFdmVudFRhcmdldEludGVyZmFjZSBNZXNzYWdlUG9ydDo6ZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVzc2Fn
ZVBvcnQ7CisgICAgcmV0dXJuIE1lc3NhZ2VQb3J0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwog
fQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZXNzYWdlUG9ydDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAkocmV2aXNpb24g
MTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAg
ICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lc3NhZ2VQb3J0
KCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL01vdXNlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw5ICsxNzUsOSBAQCB2b2lk
IE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0CiAgICAgLy8gRklYTUU6IG1fY2xp
cGJvYXJkIGlzIG5vdCBzZXQgdG8gMCBoZXJlLgogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1v
dXNlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgTW91c2VFdmVu
dDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yTW91c2VFdmVudDsKKyAgICByZXR1cm4gTW91c2VFdmVudEludGVyZmFjZVR5cGU7
CiB9CiAKIGJvb2wgTW91c2VFdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL01vdXNlRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L01vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAK
ICAgICBDbGlwYm9hcmQqIGRhdGFUcmFuc2ZlcigpIGNvbnN0IHsgcmV0dXJuIGlzRHJhZ0V2ZW50
KCkgPyBtX2NsaXBib2FyZC5nZXQoKSA6IDA7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFj
ZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVu
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5
ICs2NCw5IEBAIHZvaWQgTXV0YXRpb25FdmVudDo6aW5pdE11dGF0aW9uRXZlbnQoY28KICAgICBt
X2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE11dGF0
aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgTXV0YXRpb25F
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yTXV0YXRpb25FdmVudDsKKyAgICByZXR1cm4gTXV0YXRpb25FdmVudEludGVy
ZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBhdHRyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0ck5hbWU7IH0KICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0ckNoYW5nZTsgfQogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE11dGF0
aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMyw5ICsxODIz
LDkgQEAgTm9kZSogTm9kZTo6ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZQogICAgIHJldHVy
biAwOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE5vZGU6OmludGVyZmFjZU5hbWUoKSBjb25z
dAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTm9kZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTm9kZTsKKyAgICByZXR1
cm4gTm9kZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogTm9kZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0yMTk3LDcgKzIx
OTcsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2CiAgICAgICAg
ICAgICAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuaGFuZGxlQ29udGV4dE1lbnVF
dmVudChldmVudCk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkudGV4dElucHV0RXZlbnQpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5oYXNJbnRlcmZhY2Uo
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRFdmVudCkpCisgICAgICAgIGlmIChldmVudC0+
ZXZlbnRJbnRlcmZhY2UoKSA9PSBUZXh0RXZlbnRJbnRlcmZhY2VUeXBlKQogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihzdGF0aWNf
Y2FzdDxUZXh0RXZlbnQqPihldmVudCkpOwogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQpAQCAt
MjIxNyw3ICsyMjE3LDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dgogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2ZW50LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygp
LmludGVyZmFjZUZvcldoZWVsRXZlbnQpKSB7CisgICAgfSBlbHNlIGlmICgoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91
c2V3aGVlbEV2ZW50KSAmJiBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50
ZXJmYWNlVHlwZSkgewogICAgICAgICBXaGVlbEV2ZW50KiB3aGVlbEV2ZW50ID0gc3RhdGljX2Nh
c3Q8V2hlZWxFdmVudCo+KGV2ZW50KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGRvbid0
IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hlZWwgZXZlbnQgdG8gdGhlIGZpcnN0IG5vZGUg
d2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE1NjIy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyOSw3
ICs1MjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKTsKICAgICB2aXJ0
dWFsIEhUTUxJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw5ICs2OCw5IEBAIE92ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoY29uc3QgQXRv
bWkKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBPdmVyZmxvd0V2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE92ZXJmbG93RXZlbnQ6OmV2ZW50SW50ZXJmYWNl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck92ZXJmbG93
RXZlbnQ7CisgICAgcmV0dXJuIE92ZXJmbG93RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB2b2lk
IE92ZXJmbG93RXZlbnQ6OmluaXRPdmVyZmxvd0V2ZW50KHVuc2lnbmVkIHNob3J0IG9yaWVudCwg
Ym9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL092ZXJmbG93RXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL092ZXJmbG93RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBt
X2hvcml6b250YWxPdmVyZmxvdzsgfQogICAgIGJvb2wgdmVydGljYWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxPdmVyZmxvdzsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJm
YWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgT3ZlcmZsb3dFdmVu
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAko
cmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIFBhZ2VUcmFuc2l0aW9uRXZl
bnQ6On5QYWdlVHJhbnNpdGlvbkV2ZW4KIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBQYWdl
VHJhbnNpdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFBh
Z2VUcmFuc2l0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvclBhZ2VUcmFuc2l0aW9uRXZlbnQ7CisgICAgcmV0dXJu
IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgJKHJl
dmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB+UGFnZVRyYW5zaXRpb25FdmVudCgpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2
ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBib29sIHBlcnNpc3RlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGVyc2lzdGVkOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5j
cHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOSBAQCBQYXNzUmVmUHRyPFBvcFN0YXRl
RXZlbnQ+IFBvcFN0YXRlRXZlbnQ6CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2
ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUG9wU3Rh
dGVFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBQb3BTdGF0ZUV2
ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JQb3BTdGF0ZUV2ZW50OworICAgIHJldHVybiBQb3BTdGF0ZUV2ZW50SW50ZXJm
YWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1BvcFN0YXRlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
UG9wU3RhdGVFdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UG9wU3RhdGVFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBTY3JpcHRWYWx1ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CiAgICAgSGlzdG9yeSogaGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsg
fQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgUG9wU3RhdGVFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Byb2dyZXNzRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9n
cmVzc0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1By
b2dyZXNzRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIFByb2dyZXNz
RXZlbnQ6OlByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWkKIHsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBQcm9ncmVzc0V2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNl
IFByb2dyZXNzRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvclByb2dyZXNzRXZlbnQ7CisgICAgcmV0dXJuIFByb2dyZXNz
RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJv
Z3Jlc3NFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2
ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBsb2FkZWQoKSBjb25zdCB7IHJldHVybiBtX2xvYWRlZDsgfQogICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyB0b3RhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWw7IH0KIAotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CiAgICAgUHJvZ3Jlc3NFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJj
ZUZpbGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZpbGU7IH0KICAgICBpbnQgbGluZU51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudDsgfQorICAgIHZpcnR1YWwg
RXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBTZWN1cml0eVBv
bGljeVZpb2xhdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAgIFNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHRF
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQsOSArMTE0LDkgQEAgdm9pZCBUZXh0RXZlbnQ6OmluaXRUZXh0
RXZlbnQoY29uc3QgQXRvbQogICAgIG1fZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgVGV4dEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRl
eHRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50OworICAgIHJldHVybiBUZXh0RXZlbnRJbnRlcmZhY2VU
eXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vVGV4dEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVu
dC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAogICAgICAgICBTdHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAg
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAog
ICAgICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0g
VGV4dEV2ZW50SW5wdXRMaW5lQnJlYWs7IH0KICAgICAgICAgYm9vbCBpc0NvbXBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbjsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5
ICs5Miw5IEBAIHZvaWQgVG91Y2hFdmVudDo6aW5pdFRvdWNoRXZlbnQoVG91Y2hMaXMKIAogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFRvdWNoRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAor
RXZlbnRJbnRlcmZhY2UgVG91Y2hFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVG91Y2hFdmVudDsKKyAgICByZXR1cm4g
VG91Y2hFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgVG91Y2hFdmVudDo6aXNUb3VjaEV2
ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2
ZW50KCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUb3VjaEV2ZW50KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1RyYW5zaXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDkgKzc2LDkgQEAgY29uc3QgU3RyaW5nJiBUcmFuc2l0aW9uRXZlbnQ6OnBzZXVkb0VsZQog
ICAgIHJldHVybiBtX3BzZXVkb0VsZW1lbnQ7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVHJh
bnNpdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRyYW5z
aXRpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yVHJhbnNpdGlvbkV2ZW50OworICAgIHJldHVybiBUcmFuc2l0aW9u
RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1RyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJhbnNpdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OwogICAgIGNv
bnN0IFN0cmluZyYgcHNldWRvRWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgVHJhbnNpdGlv
bkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkg
KzkwLDkgQEAgYm9vbCBVSUV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAogICAgIHJldHVybiB0cnVl
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFVJRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25z
dAorRXZlbnRJbnRlcmZhY2UgVUlFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVUlFdmVudDsKKyAgICByZXR1cm4gVUlF
dmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGludCBVSUV2ZW50OjprZXlDb2RlKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1VJRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1VJRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAg
ICAgQWJzdHJhY3RWaWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9CiAg
ICAgaW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
RXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNVSUV2ZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBrZXlDb2RlKCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgZG91YmxlIFdlYktpdEFuaW1hdGlv
bkV2ZW50OjplbGFwc2VkVGltZQogICAgIHJldHVybiBtX2VsYXBzZWRUaW1lOwogfQogCi1jb25z
dCBBdG9taWNTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29u
c3QKK0V2ZW50SW50ZXJmYWNlIFdlYktpdEFuaW1hdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJLaXRBbmlt
YXRpb25FdmVudDsKKyAgICByZXR1cm4gV2ViS2l0QW5pbWF0aW9uRXZlbnRJbnRlcmZhY2VUeXBl
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0Owog
ICAgIGRvdWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJm
YWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0QW5pbWF0
aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDkgKzI0MCw5IEBAIHZvaWQgV2ViS2l0TmFtZWRGbG93
OjpkaXNwYXRjaFJlZ2lvbk92ZXIKICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBXZWJLaXROYW1lZEZsb3c6OmludGVyZmFjZU5hbWUoKSBjb25zdAor
RXZlbnRUYXJnZXRJbnRlcmZhY2UgV2ViS2l0TmFtZWRGbG93OjpldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJLaXRO
YW1lZEZsb3c7CisgICAgcmV0dXJuIFdlYktpdE5hbWVkRmxvd0V2ZW50VGFyZ2V0SW50ZXJmYWNl
VHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV2ViS2l0TmFtZWRGbG93OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXROYW1lZEZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFt
ZWRGbG93LmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRO
YW1lZEZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgUmVmQ291bnRlZDxXZWJLaXROYW1lZEZsb3c+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxXZWJLaXROYW1lZEZsb3c+OjpkZXJlZjsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgSlMgYmluZGluZyBjb2RlIHRvIGRl
dGVybWluZSBpZiB0aGUgTmFtZWRGbG93IG9iamVjdCBpcyByZWFjaGFibGUgb3Igbm90LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJKHJldmlz
aW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw5IEBAIGNvbnN0IFN0cmluZyYgV2ViS2l0
VHJhbnNpdGlvbkV2ZW50Ojpwc2UKICAgICByZXR1cm4gbV9wc2V1ZG9FbGVtZW50OwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFdlYktpdFRyYW5zaXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktp
dFRyYW5zaXRpb25FdmVudDsKKyAgICByZXR1cm4gV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJm
YWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZWxhcHNlZFRpbWUoKSBjb25zdDsK
ICAgICBjb25zdCBTdHJpbmcmIHBzZXVkb0VsZW1lbnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBF
dmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdl
YktpdFRyYW5zaXRpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAko
cmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkgQEAgdm9pZCBXaGVlbEV2ZW50Ojppbml0V2Vi
S2l0V2hlZWxFdmVudChpbgogICAgICAgICAgICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hp
ZnRLZXksIG1ldGFLZXkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdoZWVsRXZlbnQ6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgV2hlZWxFdmVudDo6ZXZlbnRJbnRl
cmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hl
ZWxFdmVudDsKKyAgICByZXR1cm4gV2hlZWxFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wg
V2hlZWxFdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZl
bnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gTmVlZGVk
IGZvciBPYmplY3RpdmUtQyBsZWdhY3kgc3VwcG9ydAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkg
Y29uc3QgeyByZXR1cm4gbV93aGVlbERlbHRhLngoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VF
dmVudCgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2OSw5IEBAIEZpbGVSZWFkZXI6
On5GaWxlUmVhZGVyKCkKICAgICB0ZXJtaW5hdGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBGaWxlUmVhZGVyOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IEZpbGVSZWFkZXI6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvckZpbGVSZWFkZXI7CisgICAgcmV0dXJuIEZpbGVSZWFk
ZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgRmlsZVJlYWRlcjo6Y2FuU3Vz
cGVuZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBzdHJpbmdSZXN1
bHQoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0
aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIC8vIEZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBA
IHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHAKIAogdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBp
ZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdF
dmVudCgpIHx8IGV2ZW50LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldo
ZWVsRXZlbnQpIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCisg
ICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNE
cmFnRXZlbnQoKSB8fCBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJm
YWNlVHlwZSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQogICAg
ICAgICBmb3J3YXJkRXZlbnQoZXZlbnQpOwogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgZXZl
bnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSkKICAgICAgICAgaGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVu
dCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDksOSArNjQ5LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OnJl
dHVyblRvUmVhbHRpbWUoKQogICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5yZXR1cm5U
b1JlYWx0aW1lKCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sbGVyOjpp
bnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIE1lZGlhQ29udHJvbGxl
cjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yTWVkaWFDb250cm9sbGVyOworICAgIHJldHVybiBNZWRpYUNvbnRyb2xs
ZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIC8vIFRoZSBzcGVjIHNheXMgdG8gZmly
ZSBwZXJpb2RpYyB0aW1ldXBkYXRlIGV2ZW50cyAodGhvc2Ugc2VudCB3aGlsZSBwbGF5aW5nKSBl
dmVyeQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBFdmVudFRhcmdldAog
ICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgcmVmKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgZGVyZWYoKTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgfTsKICAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEm
IGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fZXZlbnRUYXJnZXRE
YXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhS2V5RXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAgTWVkaWFLZXlFdmVudDo6fk1lZGlhS2V5RXZlbnQo
KQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5RXZlbnQ6OmludGVyZmFjZU5h
bWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgTWVkaWFLZXlFdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFLZXlF
dmVudDsKKyAgICByZXR1cm4gTWVkaWFLZXlFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5oCShy
ZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhS2V5RXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVkaWFLZXlFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAg
U3RyaW5nIGtleVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5U3lzdGVtOyB9CiAgICAgU3Ry
aW5nIHNlc3Npb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2Fy
ZEV2ZW50KEV2CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGVsZW1lbnQo
KS5yZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2
ZW50KCkgfHwgZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hl
ZWxFdmVudCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpKSB7CisgICAgaWYgKGVsZW1l
bnQoKS5yZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJh
Z0V2ZW50KCkgfHwgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFj
ZVR5cGUgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpKSB7CiAgICAgICAgIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShlbGVtZW50KCkucmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKICAgICAgICAgICAgIGlmIChSZW5k
ZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3go
KSkgewpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVC
bHVyRXZlbnQKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0
bHkoRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yVGV4dEV2ZW50KSAmJiBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkt
PmRhdGEoKSA9PSAiXG4iKSB8fCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZl
bnQpOworICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNlVHlw
ZSAmJiBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8fCBJ
bnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOwogfQogCiBSZW5kZXJFbGVt
ZW50KiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hJiBhcmVu
YSwgUmVuZGVyU3R5bGUmKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw5ICs1Niw5IEBAIFdlYkdMQ29udGV4dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQo
KQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYkdMQ29udGV4dEV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFdlYkdMQ29udGV4dEV2ZW50OjpldmVudElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JX
ZWJHTENvbnRleHRFdmVudDsKKyAgICByZXR1cm4gV2ViR0xDb250ZXh0RXZlbnRJbnRlcmZhY2VU
eXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgJKHJldmlzaW9uIDE1NjIyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBzdGF0
dXNNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNNZXNzYWdlOyB9CiAKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBXZWJHTENvbnRleHRFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sc0FwcGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MDEsOSArNjAxLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xzQXBwbGVFdmVudExpc3Rl
bmVyOjpoYQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50KQogICAgICAgICBtX21lZGlhQ29udHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQoZXZlbnQpOwot
Ci0gICAgZWxzZSBpZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQotICAgICAg
ICAmJiBldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2
ZW50KSkgeworICAgIGVsc2UgaWYgKChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVl
bEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkg
JiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsK
ICAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PFdoZWVsRXZlbnQq
PihldmVudCk7CiAgICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRp
b25zQ29udGFpbmVyUHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC0+d2hlZWxEZWx0YVko
KSkpCiAgICAgICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgU3BpbkJ1dHRvbkVs
ZW1lbnQ6OmZvcndhcmRFdmVudChFdmUKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIWV2ZW50LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvcldoZWVsRXZlbnQpKQorICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSAhPSBX
aGVlbEV2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3Nw
aW5CdXR0b25Pd25lcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFj
a0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFja0xpc3QuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBAQCBB
dWRpb1RyYWNrKiBBdWRpb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkCiAgICAgcmV0dXJuIDA7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9UcmFja0xpc3Q6OmludGVyZmFjZU5hbWUoKSBj
b25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgQXVkaW9UcmFja0xpc3Q6OmV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1
ZGlvVHJhY2tMaXN0OworICAgIHJldHVybiBBdWRpb1RyYWNrTGlzdEV2ZW50VGFyZ2V0SW50ZXJm
YWNlVHlwZTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1
ZGlvVHJhY2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9B
dWRpb1RyYWNrTGlzdC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8QXVkaW9UcmFjaz4pOwogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNl
TmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBB
dWRpb1RyYWNrTGlzdChIVE1MTWVkaWFFbGVtZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24g
MTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsOSArMTQ3LDkgQEAgVGV4dFRyYWNrOjp+VGV4dFRyYWNrKCkKICAg
ICBjbGVhckNsaWVudCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRleHRUcmFjazo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBUZXh0VHJhY2s6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclRleHRUcmFjazsKKyAgICByZXR1cm4gVGV4dFRyYWNrRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBUZXh0VHJhY2s6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgdmlydHVhbCB+VGV4dFRyYWNrKCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRl
cmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHN0
YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTU0LDkgKzExNTQsOSBAQCBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IFRleHRUcmFja0N1
ZTo6CiAgICAgcmV0dXJuIG1fZGlzcGxheVBvc2l0aW9uOwogfQogCi1jb25zdCBBdG9taWNTdHJp
bmcmIFRleHRUcmFja0N1ZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVy
ZmFjZSBUZXh0VHJhY2tDdWU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRUcmFja0N1ZTsKKyAgICByZXR1cm4g
VGV4dFRyYWNrQ3VlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBUZXh0VHJhY2tDdWU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAx
NTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogICAgIGludCBjYWxjdWxhdGVD
b21wdXRlZExpbmVQb3NpdGlvbigpOwogICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0
UG9zaXRpb25Db29yZGluYXRlcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICBz
dGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IGdldENTU1Bvc2l0aW9uKCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHJldmlzaW9uIDE1
NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMyw5ICsyMjMsOSBAQCBib29sIFRleHRUcmFja0xpc3Q6OmNvbnRh
aW5zKFRyYWNrQmFzZSogCiAgICAgcmV0dXJuIHRyYWNrcy0+ZmluZCh0cmFjaykgIT0gbm90Rm91
bmQ7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrTGlzdDo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBUZXh0VHJhY2tMaXN0OjpldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JUZXh0VHJhY2tMaXN0OworICAgIHJldHVybiBUZXh0VHJhY2tMaXN0RXZlbnRUYXJnZXRJbnRl
cmZhY2VUeXBlOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrTGlzdC5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShUcmFja0Jhc2UqKSBPVkVSUklERTsKIAog
ICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVy
ZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAg
ICAgVGV4dFRyYWNrTGlzdChIVE1MTWVkaWFFbGVtZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIFRyYWNrRXZlbnQ6On5UcmFja0V2ZW50
KCkKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBUcmFja0V2ZW50OjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRyYWNrRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRyYWNrRXZlbnQ7Cisg
ICAgcmV0dXJuIFRyYWNrRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRyYWNrRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIFRyYWNr
QmFzZSogdHJhY2soKSBjb25zdCB7IHJldHVybiBtX3RyYWNrLmdldCgpOyB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCShyZXZpc2lvbiAxNTYyMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShU
cmFja0Jhc2UqKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0ID0gMDsKICAgICB1c2lu
ZyBSZWZDb3VudGVkPFRyYWNrTGlzdEJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxU
cmFja0xpc3RCYXNlPjo6ZGVyZWY7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDkgQEAgbG9uZyBWaWRlb1RyYWNrTGlz
dDo6c2VsZWN0ZWRJbmRleCgpIGNvbgogICAgIHJldHVybiAtMTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBWaWRlb1RyYWNrTGlzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdl
dEludGVyZmFjZSBWaWRlb1RyYWNrTGlzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVmlkZW9UcmFja0xpc3Q7Cisg
ICAgcmV0dXJuIFZpZGVvVHJhY2tMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFj
a0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcHBlbmQoUGFzc1JlZlB0cjxWaWRlb1RyYWNrPik7CiAKICAgICAvLyBFdmVudFRhcmdldAot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIFZpZGVvVHJhY2tMaXN0KEhU
TUxNZWRpYUVsZW1lbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUu
Y3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
RE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsxMDQsOSBA
QCB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFib3J0KCkKICAgICAgICAgY2FjaGVIb3N0LT5h
Ym9ydCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERPTUFwcGxpY2F0aW9uQ2FjaGU6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgRE9NQXBwbGljYXRpb25D
YWNoZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yRE9NQXBwbGljYXRpb25DYWNoZTsKKyAgICByZXR1cm4gRE9NQXBw
bGljYXRpb25DYWNoZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogRE9NQXBwbGljYXRpb25DYWNoZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRp
b25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoY2FjaGVkKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG9ic29sZXRl
KTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
dG9FdmVudFR5cGUoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgaWQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsOSArNDI0LDkgQEAg
RE9NV2luZG93Ojp+RE9NV2luZG93KCkKICAgICByZW1vdmVBbGxCZWZvcmVVbmxvYWRFdmVudExp
c3RlbmVycyh0aGlzKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBET01XaW5kb3c6OmludGVy
ZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgRE9NV2luZG93OjpldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JET01XaW5kb3c7CisgICAgcmV0dXJuIERPTVdpbmRvd0V2ZW50VGFyZ2V0SW50ZXJmYWNl
VHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogRE9NV2luZG93OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNp
b24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
dGhlIG5ldHdvcmsgbG9hZC4gU2VlIGFsc28gU2VjdXJpdHlDb250ZXh0Ojppc1NlY3VyZVRyYW5z
aXRpb25Uby4KICAgICAgICAgdm9pZCBkaWRTZWN1cmVUcmFuc2l0aW9uVG8oRG9jdW1lbnQqKTsK
IAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgRE9NV2lu
ZG93KiB0b0RPTVdpbmRvdygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksOSArMjA5LDkgQEAgdm9pZCBFdmVudFNvdXJjZTo6Y2xv
c2UoKQogICAgIH0KIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBFdmVudFNvdXJjZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBFdmVudFNvdXJjZTo6ZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yRXZlbnRTb3VyY2U7CisgICAgcmV0dXJuIEV2ZW50U291cmNlRXZlbnRUYXJnZXRJbnRl
cmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5oCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RXZlbnRTb3VyY2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxFdmVudFNv
dXJjZT46OmRlcmVmOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDkgKzY3LDkg
QEAgUGVyZm9ybWFuY2U6On5QZXJmb3JtYW5jZSgpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgUGVyZm9ybWFuY2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgUGVyZm9ybWFuY2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclBlcmZvcm1hbmNlOworICAgIHJldHVybiBQZXJm
b3JtYW5jZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogUGVyZm9ybWFuY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZXJmb3JtYW5jZT4gY3JlYXRlKEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBlcmZvcm1hbmNlKGZyYW1lKSk7IH0KICAg
ICB+UGVyZm9ybWFuY2UoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRl
cmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgUGVyZm9ybWFuY2VO
YXZpZ2F0aW9uKiBuYXZpZ2F0aW9uKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NwZWVjaElucHV0RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
ZWVjaElucHV0RXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9TcGVlY2hJbnB1dEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgU3BlZWNoSW5wdXRSZXN1bHRMaXN0KiByZXN1bHRzKCkgY29uc3QgeyByZXR1
cm4gbV9yZXN1bHRzLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTcGVlY2hJbnB1dEV2ZW50KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYy
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDkgKzkyLDkgQEAgdm9pZCBTdG9yYWdlRXZlbnQ6OmluaXRTdG9yYWdlRXZl
bnQoY29ucwogICAgIG1fc3RvcmFnZUFyZWEgPSBzdG9yYWdlQXJlYTsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBTdG9yYWdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRl
cmZhY2UgU3RvcmFnZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTdG9yYWdlRXZlbnQ7CisgICAgcmV0dXJuIFN0b3Jh
Z2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjI0KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gTmVlZGVkIG9uY2Ugd2Ugc3VwcG9ydCBpbml0
PGJsYW5rPkV2ZW50TlMKICAgICAvLyB2b2lkIGluaXRTdG9yYWdlRXZlbnROUyhpbiBET01TdHJp
bmcgbmFtZXNwYWNlVVJJLCBpbiBET01TdHJpbmcgdHlwZUFyZywgaW4gYm9vbGVhbiBjYW5CdWJi
bGVBcmcsIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgaW4gRE9NU3RyaW5nIGtleUFyZywgaW4g
RE9NU3RyaW5nIG9sZFZhbHVlQXJnLCBpbiBET01TdHJpbmcgbmV3VmFsdWVBcmcsIGluIERPTVN0
cmluZyB1cmxBcmcsIFN0b3JhZ2Ugc3RvcmFnZUFyZWFBcmcpOwogCi0gICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50
SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RvcmFn
ZUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNw
cAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw5ICsyMTEsOSBAQCB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluCiAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRWxlbWVudElu
c3RhbmNlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVy
biBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU1ZHRWxlbWVudEluc3RhbmNlOworICAgIHJldHVy
biBTVkdFbGVtZW50SW5zdGFuY2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5o
CShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3Rh
bmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRQYXJlbnROb2RlKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UpIHsgbV9wYXJlbnRJ
bnN0YW5jZSA9IGluc3RhbmNlOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1pvb21FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdab29tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2OSw5IEBAIFNW
R1BvaW50IFNWR1pvb21FdmVudDo6bmV3VHJhbnNsYXRlKCkgY28KICAgICByZXR1cm4gbV9uZXdU
cmFuc2xhdGU7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU1ZHWm9vbUV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFNWR1pvb21FdmVudDo6ZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU1ZHWm9v
bUV2ZW50OworICAgIHJldHVybiBTVkdab29tRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgU1ZHUG9pbnQgbmV3VHJh
bnNsYXRlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdab29tRXZlbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6fkRlZGljYXRlZFdvCiB7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OmludGVyZmFjZU5hbWUoKSBj
b25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OmV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOworICAgIHJldHVybiBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogdm9pZCBE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2Rl
JiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbXBv
cnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBFeGNlcHRpb25Db2RlJikgT1ZF
UlJJREU7CiAKICAgICAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgICAgICAvLyBOZWVkZWQgZm9yIE9iamVjdGl2ZS1DIGJpbmRpbmdzIChzZWUgYnVnIDI4Nzc0
KS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJKHJldmlzaW9u
IDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODcsOSArODcsOSBAQCBTaGFyZWRXb3JrZXI6On5TaGFyZWRXb3JrZXIo
KQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNoYXJlZFdvcmtlcjo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBTaGFyZWRXb3JrZXI6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
clNoYXJlZFdvcmtlcjsKKyAgICByZXR1cm4gU2hhcmVkV29ya2VyRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1NoYXJlZFdvcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvU2hhcmVkV29ya2VyLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIE1lc3NhZ2VQb3J0KiBwb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9wb3J0LmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURF
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZXhwbGljaXQgU2hhcmVkV29ya2VyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29y
a2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsOSArNzAsOSBAQCBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6flNoYXJlZFdvcmtl
ckdsCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6
OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOworICAgIHJl
dHVybiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0K
IAogU2hhcmVkV29ya2VyVGhyZWFkKiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6dGhyZWFkKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vIEV2
ZW50VGFyZ2V0Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAgICAgICAvLyBT
ZXR0ZXJzL0dldHRlcnMgZm9yIGF0dHJpYnV0ZXMgaW4gU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
aWRsCiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29ubmVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCShyZXZpc2lvbiAxNTYyMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsx
MDgsOSBAQCBXb3JrZXI6On5Xb3JrZXIoKQogICAgIG1fY29udGV4dFByb3h5LT53b3JrZXJPYmpl
Y3REZXN0cm95ZWQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXb3JrZXI6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgV29ya2VyOjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JX
b3JrZXI7CisgICAgcmV0dXJuIFdvcmtlckV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAog
dm9pZCBXb3JrZXI6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXI+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICAgICAgdmlydHVhbCB+V29ya2VyKCk7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgICAgIC8vIE5lZWRlZCBmb3IgT2JqZWN0aXZlLUMgYmluZGluZ3MgKHNlZSBi
dWcgMjg3NzQpLgpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZp
c2lvbiAxNTYyMjQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzA1LDkgKzEzMDUsOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpj
b250ZXh0RGVzdHJveWVkKCkKICAgICBBY3RpdmVET01PYmplY3Q6OmNvbnRleHREZXN0cm95ZWQo
KTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBYTUxIdHRwUmVxdWVzdDo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBYTUxIdHRwUmVxdWVzdDo6ZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yWE1MSHR0cFJlcXVlc3Q7CisgICAgcmV0dXJuIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXRJ
bnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVxdWVz
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAkocmV2aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRUaW1lb3V0KCk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVu
dFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
OwogCiAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgJ
KHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbG9hZGVkKCk7
IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplKCkgY29uc3QgeyByZXR1cm4gdG90
YWwoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50OyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudEludGVyZmFjZVR5
cGU7IH0KIAogcHJpdmF0ZToKICAgICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSB7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAkocmV2
aXNpb24gMTU2MjI0KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6WE1MSHR0cFJlcXVlc3RVcGxvCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgWE1MSHR0
cFJlcXVlc3RVcGxvYWQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclhNTEh0dHBSZXF1ZXN0VXBsb2Fk
OworICAgIHJldHVybiBYTUxIdHRwUmVxdWVzdFVwbG9hZEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmgJKHJldmlzaW9uIDE1NjIyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkZXJlZigpIHsgbV94bWxIdHRw
UmVxdWVzdC0+ZGVyZWYoKTsgfQogICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVl
c3QoKSBjb25zdCB7IHJldHVybiBtX3htbEh0dHBSZXF1ZXN0OyB9CiAKLSAgICAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Owog
ICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3Q7CiAKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212283</attachid>
            <date>2013-09-21 13:44:35 -0700</date>
            <delta_ts>2013-09-21 15:14:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121751-20130921134434.patch</filename>
            <type>text/plain</type>
            <size>122585</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRXZlbnQgYW5kIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZXMgZG9uJ3QgbmVlZCB0byBiZSBzdG9yZSBhcyBBdG9taWNTdHJpbmdzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb252ZXJ0IHRoZSBFdmVu
dCBhbmQgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIGZyb20gQXRvbWljU3RyaW5n
cyB0byBlbnVtcy4gVGhleQorICAgICAgICBhcmUgbm90IGV4dGVuc2libGUgYW5kIG5vdCBleHBv
c2VkIGFzIFN0cmluZ3MgYW55d2hlcmUuCisKKyAgICAgICAgKiBGaWxlcyBlbGlkZWQgKgorCiAy
MDEzLTA5LTIxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBO
b2RlOiBGSU5BTC1pemUgRXZlbnRUYXJnZXQgb3ZlcnJpZGVzLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gY3JlYXRlKE5hdmlnYXRvciopOwogCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBjb25zdCBXVEY6OkF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JCYXR0ZXJ5TWFuYWdlcjsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBCYXR0ZXJ5TWFuYWdlckV2ZW50VGFy
Z2V0SW50ZXJmYWNlVHlwZTsgfQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKICAgICBib29sIGNoYXJnaW5nKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL01lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDkgQEAgTWVkaWFLZXlNZXNzYWdlRXZlbnQ6On5N
ZWRpYUtleU1lc3NhZ2VFdgogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5TWVz
c2FnZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhS2V5
TWVzc2FnZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYUtleU1lc3NhZ2VFdmVudDsKKyAgICByZXR1cm4gTWVk
aWFLZXlNZXNzYWdlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
TWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lZGlhS2V5TWVzc2FnZUV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7
CiAgICAgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICBVaW50OEFycmF5KiBtZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXNzYWdlLmdldCgpOyB9CiAgICAgU3RyaW5nIGRlc3RpbmF0aW9uVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblVSTDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVk
RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw5IEBAIE1lZGlhS2V5TmVlZGVkRXZlbnQ6On5NZWRpYUtleU5lZWRlZEV2ZW4KIHsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUtleU5lZWRlZEV2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmV2ZW50SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1l
ZGlhS2V5TmVlZGVkRXZlbnQ7CisgICAgcmV0dXJuIE1lZGlhS2V5TmVlZGVkRXZlbnRJbnRlcmZh
Y2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVk
RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhS2V5TmVl
ZGVkRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAg
IFVpbnQ4QXJyYXkqIGluaXREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbml0RGF0YS5nZXQoKTsg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
U2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6YWRkS2V5
VGltZXJGaXJlZChUCiAgICAgfQogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5U2Vz
c2lvbjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBNZWRpYUtl
eVNlc3Npb246OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhS2V5U2Vzc2lvbjsKKyAgICByZXR1cm4gTWVkaWFL
ZXlTZXNzaW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBNZWRpYUtleVNlc3Npb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHdlYmtpdGtleWVycm9yKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHdlYmtpdGtleW1lc3NhZ2UpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qg
T1ZFUlJJREU7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9GaWxlV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JD
b2RlKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0
aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3Q7CiAKICAgICBib29sIGlzQ2xvc2VQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9j
bG9zZVBlbmRpbmc7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRl
cmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksOSArNDksOSBAQCBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6On5JREJWZXJzaW9u
Q2hhbmdlCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgSURCVmVyc2lvbkNoYW5nZUV2ZW50
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VF
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9ySURCVmVyc2lvbkNoYW5nZUV2ZW50OworICAgIHJldHVybiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+
IG9sZFZlcnNpb24oKSB7IHJldHVybiBtX29sZFZlcnNpb247IH0KICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQW55PiBuZXdWZXJzaW9uKCkgeyByZXR1cm4gbV9uZXdWZXJzaW9uOyB9CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IG9sZFZlcnNp
b24sIFBhc3NSZWZQdHI8SURCQW55PiBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kaWV1aS9V
SVJlcXVlc3RFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kaWV1aS9VSVJlcXVlc3RFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDkg
Kzc0LDkgQEAgVUlSZXF1ZXN0RXZlbnQ6On5VSVJlcXVlc3RFdmVudCgpCiB7CiB9CiAgICAgCi1j
b25zdCBBdG9taWNTdHJpbmcmIFVJUmVxdWVzdEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QK
K0V2ZW50SW50ZXJmYWNlIFVJUmVxdWVzdEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JVSVJlcXVlc3RFdmVudDsKKyAg
ICByZXR1cm4gVUlSZXF1ZXN0RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBVSVJlcXVlc3RFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OlVJUmVxdWVzdEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVm
UHRyPFVJUmVxdWVzdEV2ZW50PiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kaWV1aS9VSVJlcXVlc3RFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kaWV1aS9VSVJlcXVlc3RFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGlldWkvVUlSZXF1ZXN0RXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgVUlSZXF1ZXN0RXZlbnQo
KTsKICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBP
VkVSUklERTsKKyAgICBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJS
SURFOwogICAgIAogcHJpdmF0ZToKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVjZWl2ZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw5ICsyMDcs
OSBAQCBib29sIE1lZGlhU291cmNlOjppc1R5cGVTdXBwb3J0ZWQoY29uc3QgCiAgICAgcmV0dXJu
IE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFTb3VyY2VNSU1FVHlwZShjb250ZW50
VHlwZS50eXBlKCksIGNvZGVjcyk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTb3Vy
Y2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFTb3Vy
Y2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvck1lZGlhU291cmNlOworICAgIHJldHVybiBNZWRpYVNvdXJjZUV2ZW50
VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAko
cmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBpc1R5cGVTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdl
dEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAg
dXNpbmcgUmVmQ291bnRlZDxNZWRpYVNvdXJjZUJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxNZWRpYVNvdXJjZUJhc2U+OjpkZXJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDkgKzIxNCw5IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIFNvdXJjZUJ1ZmZlcjo6c2MKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlQnVmZmVy
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNvdXJjZUJ1ZmZl
cjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yU291cmNlQnVmZmVyOworICAgIHJldHVybiBTb3VyY2VCdWZmZXJFdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIEV2ZW50VGFyZ2V0RGF0YSogU291cmNlQnVmZmVy
OjpldmVudFRhcmdldERhdGEoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFj
ZQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNp
bmcgUmVmQ291bnRlZDxTb3VyY2VCdWZmZXI+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxT
b3VyY2VCdWZmZXI+OjpkZXJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlckxp
c3Q6OnNjaGVkdWxlRXZlbnQoY29uCiAgICAgbV9hc3luY0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlQnVmZmVy
TGlzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBTb3VyY2VC
dWZmZXJMaXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTb3VyY2VCdWZmZXJMaXN0OworICAgIHJldHVybiBTb3Vy
Y2VCdWZmZXJMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBTb3VyY2VCdWZmZXJMaXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyTGlzdC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJ
REU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlckxpc3Q+OjpyZWY7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlhU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktp
dE1lZGlhU291cmNlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRNZWRpYVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw5ICsxOTcsOSBAQCBib29sIFdlYktpdE1lZGlhU291cmNlOjppc1R5cGVTdXBwb3J0ZWQo
CiAgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFTb3VyY2VNSU1F
VHlwZShjb250ZW50VHlwZS50eXBlKCksIGNvZGVjcyk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgV2ViS2l0TWVkaWFTb3VyY2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgV2ViS2l0TWVkaWFTb3VyY2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktpdE1lZGlhU291cmNl
OworICAgIHJldHVybiBXZWJLaXRNZWRpYVNvdXJjZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9XZWJLaXRNZWRpYVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2UuaAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRNZWRp
YVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBpc1R5cGVTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAgIC8v
IEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNp
bmcgUmVmQ291bnRlZDxNZWRpYVNvdXJjZUJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxNZWRpYVNvdXJjZUJhc2U+OjpkZXJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvV2ViS2l0U291cmNlQnVmZmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmNw
cAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsOSArOTMs
OSBAQCB2b2lkIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3Q6OmNyZWF0ZUFuZEZpCiAgICAgbV9hc3lu
Y0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKLWNvbnN0IEF0
b21pY1N0cmluZyYgV2ViS2l0U291cmNlQnVmZmVyTGlzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
CitFdmVudFRhcmdldEludGVyZmFjZSBXZWJLaXRTb3VyY2VCdWZmZXJMaXN0OjpldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JXZWJLaXRTb3VyY2VCdWZmZXJMaXN0OworICAgIHJldHVybiBXZWJLaXRTb3VyY2VCdWZmZXJM
aXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBXZWJLaXRTb3VyY2VCdWZmZXJMaXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0U291cmNlQnVm
ZmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvV2ViS2l0U291cmNlQnVmZmVyTGlzdC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwog
CiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFdlYktpdFNvdXJjZUJ1
ZmZlckxpc3Q+OjpyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1Nyw5ICsyNTcsOSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpjb250ZXh0RGVzdHJveWVkKCkK
ICAgICBtX3N0b3BwZWQgPSB0cnVlOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3Ry
ZWFtOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIE1lZGlhU3Ry
ZWFtOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JNZWRpYVN0cmVhbTsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1FdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lZGlh
U3RyZWFtOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0u
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yLmdl
dCgpOyB9CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxNZWRpYVN0cmVhbT46OnJl
ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1F
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsOSArNzcsOSBAQCBNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW1FdmVudDo6c3RyZWFt
KCkgCiAgICAgcmV0dXJuIG1fc3RyZWFtLmdldCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IE1lZGlhU3RyZWFtRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2Ug
TWVkaWFTdHJlYW1FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFTdHJlYW1FdmVudDsKKyAgICByZXR1cm4gTWVk
aWFTdHJlYW1FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1FdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNyBAQCBwdWJsaWM6CiAKICAgICBNZWRpYVN0cmVhbSogc3RyZWFtKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBNZWRpYVN0cmVhbUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw5ICsxNzQsOSBAQCB2b2lkIE1l
ZGlhU3RyZWFtVHJhY2s6OnN0b3AoKQogICAgIG1fc3RvcHBlZCA9IHRydWU7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudFRhcmdldEludGVyZmFjZSBNZWRpYVN0cmVhbVRyYWNrOjpldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYVN0
cmVhbVRyYWNrOworICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZWRpYVN0cmVhbVRyYWNrOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCShyZXZpc2lvbiAx
NTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBlbmRlZCgpIGNvbnN0OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIE1lZGlhU3RyZWFtVHJhY2sqIE1lZGlhU3RyZWFt
VHJhY2tFdmVudDoKICAgICByZXR1cm4gbV90cmFjay5nZXQoKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgTWVkaWFTdHJlYW1UcmFja0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYVN0cmVhbVRyYWNr
RXZlbnQ7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tFdmVudEludGVyZmFjZVR5cGU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZlbnQuaAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgTWVkaWFTdHJlYW1UcmFjayogdHJhY2soKSBjb25zdDsKIAogICAgIC8vIEV2ZW50
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1UcmFja0V2ZW50KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRN
RlNlbmRlci5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw5ICsx
MjgsOSBAQCB2b2lkIFJUQ0RUTUZTZW5kZXI6OmRpZFBsYXlUb25lKGNvbnN0IFN0CiAgICAgc2No
ZWR1bGVEaXNwYXRjaEV2ZW50KFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6OmNyZWF0ZSh0b25lKSk7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDRFRNRlNlbmRlcjo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBSVENEVE1GU2VuZGVyOjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JS
VENEVE1GU2VuZGVyOworICAgIHJldHVybiBSVENEVE1GU2VuZGVyRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBSVENEVE1GU2VuZGVyOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5oCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUih0b25lY2hhbmdlKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBBY3RpdmVE
T01PYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRN
RlRvbmVDaGFuZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEVE1GVG9uZUNoYW5nZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GVG9uZUNoYW5n
ZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCBjb25zdCBTdHJpbmcm
IFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6OnRvCiAgICAgcmV0dXJuIG1fdG9uZTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50SW50ZXJmYWNlIFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0RU
TUZUb25lQ2hhbmdlRXZlbnQ7CisgICAgcmV0dXJuIFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdlRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hh
bmdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEVE1GVG9uZUNoYW5nZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiB0b25lKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBSVENEVE1GVG9uZUNoYW5nZUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENE
YXRhQ2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw5ICsyODUsOSBAQCB2b2lkIFJU
Q0RhdGFDaGFubmVsOjpkaWREZXRlY3RFcnJvcigpCiAgICAgc2NoZWR1bGVEaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsOjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFJUQ0RhdGFDaGFubmVsOjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JS
VENEYXRhQ2hhbm5lbDsKKyAgICByZXR1cm4gUlRDRGF0YUNoYW5uZWxFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFJUQ0RhdGFDaGFubmVsOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9w
KCk7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdl
dEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IE9WRVJSSURFOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxSVENEYXRhQ2hhbm5lbD46OnJl
ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5u
ZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEYXRhQ2hhbm5lbEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbEV2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsOSArNjIsOSBAQCBSVENEYXRhQ2hhbm5lbCogUlRDRGF0YUNoYW5u
ZWxFdmVudDo6Y2hhCiAgICAgcmV0dXJuIG1fY2hhbm5lbC5nZXQoKTsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBSVENEYXRhQ2hhbm5lbEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50SW50ZXJmYWNlIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0RhdGFDaGFubmVsRXZl
bnQ7CisgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuaAkocmV2aXNpb24gMTU2
MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAg
UlRDRGF0YUNoYW5uZWwqIGNoYW5uZWwoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVy
ZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJUQ0RhdGFDaGFu
bmVsRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsOSBAQCBSVENJY2VDYW5kaWRhdGUq
IFJUQ0ljZUNhbmRpZGF0ZUV2ZW50OjpjCiAgICAgcmV0dXJuIG1fY2FuZGlkYXRlLmdldCgpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0ljZUNhbmRpZGF0ZUV2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFJUQ0ljZUNhbmRpZGF0ZUV2ZW50OjpldmVudElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JS
VENJY2VDYW5kaWRhdGVFdmVudDsKKyAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVF
dmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogCiAgICAgUlRDSWNlQ2FuZGlkYXRlKiBjYW5kaWRhdGUoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7
CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIFJUQ0ljZUNhbmRpZGF0ZUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NSw5ICs1ODUsOSBA
QCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpkaWRBZGRSZW1vdGVEYXRhCiAgICAgc2NoZWR1bGVE
aXNwYXRjaEV2ZW50KFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGF0
YWNoYW5uZWxFdmVudCwgZmFsc2UsIGZhbHNlLCBjaGFubmVsLnJlbGVhc2UoKSkpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFJUQ1BlZXJDb25uZWN0aW9uOjppbnRlcmZhY2VOYW1lKCkgY29u
c3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFJUQ1BlZXJDb25uZWN0aW9uOjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JS
VENQZWVyQ29ubmVjdGlvbjsKKyAgICByZXR1cm4gUlRDUGVlckNvbm5lY3Rpb25FdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFJUQ1BlZXJDb25u
ZWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlRGF0YUNoYW5uZWwoUGFzc093blB0
cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+KSBPVkVSUklERTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBB
Y3RpdmVET01PYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDkgKzEzMCw5IEBAIFBhc3NSZWZQdHI8Tm90aWZpY2F0aW9uPiBOb3Rp
ZmljYXRpb246OmMKIH0KICNlbmRpZgogCi1jb25zdCBBdG9taWNTdHJpbmcmIE5vdGlmaWNhdGlv
bjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBOb3RpZmljYXRp
b246OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvck5vdGlmaWNhdGlvbjsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9uRXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6c2hvdygpIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3Rp
ZmljYXRpb24uaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
b3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIy
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8Tm90aWZpY2F0aW9uPjo6ZGVyZWY7
CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCiAgICAgdm9p
ZCBzdG9wTG9hZGluZ0ljb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpc0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZWxhcHNlZFRp
bWUoKSBjb25zdCB7IHJldHVybiBtX2VsYXBzZWRUaW1lOyB9CiAgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU3BlZWNoU3ludGhlc2lzRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gU3BlZWNoU3ludGhlc2lzRXZl
bnRJbnRlcmZhY2VUeXBlOyB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWVjaFN5bnRoZXNpc0V2
ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
U3BlZWNoU3ludGhlc2lzVQogICAgIHJldHVybiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfSAgICAKICAgICAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
VGFyZ2V0SW50ZXJmYWNlIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6ZXZlbnRUYXJnZXRJbnRl
cmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlOworICAgIHJldHVybiBTcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBT
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnZvaWNlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBA
QCBwcml2YXRlOgogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyBkZXJlZigpOyB9CiAgICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTAs
OSArOTUwLDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnByb2Nlc3NBdXRvbWF0aWNQdWxsTgogICAg
ICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlc1tpXS0+cHJvY2Vzc0lmTmVjZXNzYXJ5
KGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9Db250ZXh0
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIEF1ZGlvQ29udGV4
dDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0OworICAgIHJldHVybiBBdWRpb0NvbnRleHRFdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlv
Q29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVN
YXJrZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9TdW1taW5nSnVuY3Rpb24qKTsKIAogICAgIC8vIEV2
ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEq
IGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhJiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiBt
X2V2ZW50VGFyZ2V0RGF0YTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSAr
MjgwLDkgQEAgdm9pZCBBdWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKAogICAgICAg
ICBpbnB1dChpKS0+Y2hhbmdlZE91dHB1dHMoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBB
dWRpb05vZGU6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgQXVk
aW9Ob2RlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb05vZGU7CisgICAgcmV0dXJuIEF1ZGlvTm9kZUV2ZW50
VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQXVkaW9O
b2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDcgKzE4MCw3IEBAIHB1YmxpYzoKICAgICBBdWRpb0J1czo6Q2hhbm5lbEludGVycHJl
dGF0aW9uIGludGVybmFsQ2hhbm5lbEludGVycHJldGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
aGFubmVsSW50ZXJwcmV0YXRpb247IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0
RGF0YTsgfQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhJiBlbnN1cmVFdmVudFRhcmdldERh
dGEoKSBPVkVSUklERSB7IHJldHVybiBtX2V2ZW50VGFyZ2V0RGF0YTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1
OCw5IEBAIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50Ojp+QXVkaW9Qcm9jZXNzaW5nRXYKIHsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6ZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Q
cm9jZXNzaW5nRXZlbnQ7CisgICAgcmV0dXJuIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50SW50ZXJmYWNl
VHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIoKSB7IHJldHVybiBtX2lucHV0QnVmZmVyLmdl
dCgpOyB9CiAgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlcigpIHsgcmV0dXJuIG1fb3V0cHV0
QnVmZmVyLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBBdWRpb1Byb2Nlc3NpbmdFdmVudCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIE9mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudDo6fk9mZmxpbmVBdWQKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZh
Y2UgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQ7CisgICAgcmV0dXJuIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudEludGVyZmFj
ZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICBBdWRpb0J1ZmZlciogcmVuZGVyZWRCdWZmZXIo
KSB7IHJldHVybiBtX3JlbmRlcmVkQnVmZmVyLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJ
bnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9DbG9zZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJlYXNvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVhc29uOyB9CiAKICAgICAvLyBFdmVudCBmdW5jdGlvbi4KLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDbG9zZUV2ZW50OyB9CisgICAgdmlydHVhbCBFdmVudElu
dGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENsb3NlRXZl
bnRJbnRlcmZhY2VUeXBlOyB9CiAKIHByaXZhdGU6CiAgICAgQ2xvc2VFdmVudCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw5ICs0NDgsOSBAQCB2b2lkIFdlYlNvY2tl
dDo6c2V0QmluYXJ5VHlwZShjb25zdCBTdHJpCiAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAi
JyIgKyBiaW5hcnlUeXBlICsgIicgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGJpbmFyeVR5cGU7
IGJpbmFyeVR5cGUgcmVtYWlucyB1bmNoYW5nZWQuIik7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgV2ViU29ja2V0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IFdlYlNvY2tldDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViU29ja2V0OworICAgIHJldHVybiBXZWJTb2NrZXRF
dmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdl
YlNvY2tldDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoY2xvc2UpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgZnVuY3Rpb25zLgot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdXNpbmcg
UmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDggQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiAKIHZvaWQg
SlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5oYXNJ
bnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvckVycm9yRXZlbnQpKQorCisgICAgaWYg
KGV2ZW50LT5ldmVudEludGVyZmFjZSgpICE9IEVycm9yRXZlbnRJbnRlcmZhY2VUeXBlKQogICAg
ICAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBldmVudCk7CiAKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBKU0V2ZW50Ojpj
bGlwYm9hcmREYXRhKEV4ZWNTdGF0ZQogfQogCiAjZGVmaW5lIFRSWV9UT19XUkFQX1dJVEhfSU5U
RVJGQUNFKGludGVyZmFjZU5hbWUpIFwKLSAgICBpZiAoZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ciMjaW50ZXJmYWNlTmFtZSA9PSBkZXNpcmVkSW50ZXJmYWNlKSBcCisgICAgY2FzZSBpbnRlcmZh
Y2VOYW1lIyNJbnRlcmZhY2VUeXBlOiBcCiAgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQ
RVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnRlcmZhY2VOYW1lLCBldmVudCk7CiAKIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV2
ZW50KiBldmVudCkKQEAgLTYzLDggKzYzLDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYQogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
IAotICAgIFN0cmluZyBkZXNpcmVkSW50ZXJmYWNlID0gZXZlbnQtPmludGVyZmFjZU5hbWUoKTsK
LSAgICBET01fRVZFTlRfSU5URVJGQUNFU19GT1JfRUFDSChUUllfVE9fV1JBUF9XSVRIX0lOVEVS
RkFDRSkKKyAgICBzd2l0Y2ggKGV2ZW50LT5ldmVudEludGVyZmFjZSgpKSB7CisgICAgICAgIERP
TV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKFRSWV9UT19XUkFQX1dJVEhfSU5URVJGQUNFKQor
ICAgIH0KIAogICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0
LCBFdmVudCwgZXZlbnQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFt
ZSkgXAotICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yIyNpbnRlcmZhY2VOYW1lID09
IGRlc2lyZWRJbnRlcmZhY2UpIFwKKyAgICBjYXNlIGludGVyZmFjZU5hbWUjI0V2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTogXAogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PGludGVyZmFjZU5hbWUqPih0YXJnZXQpKTsKIAogSlNWYWx1ZSB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXZlbnRUYXJn
ZXQqIHRhcmdldCkKQEAgLTQ0LDE5ICs0NCw5IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogCi0gICAgQXRvbWljU3RyaW5nIGRlc2lyZWRJbnRlcmZhY2UgPSB0YXJnZXQtPmludGVyZmFj
ZU5hbWUoKTsKLQotICAgIC8vIEZJWE1FOiBXaHkgY2FuJ3Qgd2UgdXNlIHRvSlMgZm9yIHRoZXNl
IGNhc2VzPwotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPT0gZGVzaXJlZEludGVyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmplY3Qoc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUqPih0YXJnZXQpLCBleGVjKTsKLSNlbmRpZgotI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSUykKLSAgICBpZiAoZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlID09IGRlc2lyZWRJbnRlcmZhY2UpCi0gICAgICAgIHJldHVybiB0b0pTRE9N
R2xvYmFsT2JqZWN0KHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlKj4odGFyZ2V0
KSwgZXhlYyk7Ci0jZW5kaWYKLQorICAgIHN3aXRjaCAodGFyZ2V0LT5ldmVudFRhcmdldEludGVy
ZmFjZSgpKSB7CiAgICAgRE9NX0VWRU5UX1RBUkdFVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKFRSWV9U
T19XUkFQX1dJVEhfSU5URVJGQUNFKQorICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NRXZlbnRzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NRXZlbnRzLm1tCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTUV2ZW50cy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDksMjEgKzQ5LDI1IEBA
IENsYXNzIGtpdENsYXNzKFdlYkNvcmU6OkV2ZW50KiBpbXBsKQogICAgICAgICAgICAgcmV0dXJu
IFtET01LZXlib2FyZEV2ZW50IGNsYXNzXTsKICAgICAgICAgaWYgKGltcGwtPmlzTW91c2VFdmVu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIFtET01Nb3VzZUV2ZW50IGNsYXNzXTsKLSAgICAgICAg
aWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50
KSkKKworICAgICAgICBXZWJDb3JlOjpFdmVudEludGVyZmFjZSBkZXNpcmVkSW50ZXJmYWNlID0g
aW1wbC0+ZXZlbnRJbnRlcmZhY2UoKTsKKyAgICAgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0g
V2ViQ29yZTo6VGV4dEV2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgICAgIHJldHVybiBbRE9N
VGV4dEV2ZW50IGNsYXNzXTsKLSAgICAgICAgaWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkpCi0gICAgICAgICAgICByZXR1cm4gW0RPTVdo
ZWVsRXZlbnQgY2xhc3NdOyAgICAgICAgCisgICAgICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09
IFdlYkNvcmU6OldoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKQorICAgICAgICAgICAgcmV0dXJuIFtE
T01XaGVlbEV2ZW50IGNsYXNzXTsKICAgICAgICAgcmV0dXJuIFtET01VSUV2ZW50IGNsYXNzXTsK
ICAgICB9Ci0gICAgaWYgKGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yTXV0YXRpb25FdmVudCkpCisKKyAgICBXZWJDb3JlOjpFdmVudEludGVyZmFjZSBkZXNpcmVk
SW50ZXJmYWNlID0gaW1wbC0+ZXZlbnRJbnRlcmZhY2UoKTsKKyAgICBpZiAoZGVzaXJlZEludGVy
ZmFjZSA9PSBXZWJDb3JlOjpNdXRhdGlvbkV2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgcmV0
dXJuIFtET01NdXRhdGlvbkV2ZW50IGNsYXNzXTsKLSAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNl
KGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPdmVyZmxvd0V2ZW50KSkKKyAgICBpZiAoZGVzaXJl
ZEludGVyZmFjZSA9PSBXZWJDb3JlOjpPdmVyZmxvd0V2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAg
ICAgcmV0dXJuIFtET01PdmVyZmxvd0V2ZW50IGNsYXNzXTsKLSAgICBpZiAoaW1wbC0+aGFzSW50
ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZXNzYWdlRXZlbnQpKQorICAgIGlmIChk
ZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6Ok1lc3NhZ2VFdmVudEludGVyZmFjZVR5cGUpCiAg
ICAgICAgIHJldHVybiBbRE9NTWVzc2FnZUV2ZW50IGNsYXNzXTsKLSAgICBpZiAoaW1wbC0+aGFz
SW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQcm9ncmVzc0V2ZW50KSB8fCBpbXBs
LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvclhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudCkpCisgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6UHJvZ3Jl
c3NFdmVudEludGVyZmFjZVR5cGUgfHwgZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRJbnRlcmZhY2VUeXBlKQogICAgICAgICByZXR1cm4gW0RP
TVByb2dyZXNzRXZlbnQgY2xhc3NdOwotICAgIGlmIChpbXBsLT5oYXNJbnRlcmZhY2UoZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvckJlZm9yZUxvYWRFdmVudCkpCisgICAgaWYgKGRlc2lyZWRJbnRl
cmZhY2UgPT0gV2ViQ29yZTo6QmVmb3JlTG9hZEV2ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAg
cmV0dXJuIFtET01CZWZvcmVMb2FkRXZlbnQgY2xhc3NdOwogICAgIHJldHVybiBbRE9NRXZlbnQg
Y2xhc3NdOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlTG9hZEV2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VMb2FkRXZl
bnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VMb2FkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIENTU0ZvbnRG
YWNlTG9hZEV2ZW50Ojp+Q1NTRm9udEZhY2VMb2FkRXYKIHsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBDU1NGb250RmFjZUxvYWRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudElu
dGVyZmFjZSBDU1NGb250RmFjZUxvYWRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQ1NTRm9udEZhY2VMb2FkRXZlbnQ7
CisgICAgcmV0dXJuIENTU0ZvbnRGYWNlTG9hZEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
TG9hZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
TG9hZEV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZUxvYWRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKICAgICBDU1NGb250RmFjZVJ1bGUqIGZvbnRmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250
ZmFjZS5nZXQoKTsgfQogICAgIERPTUVycm9yKiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJy
b3IuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU0ZvbnRGYWNlTG9hZEV2ZW50KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgbG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZGluZ0NvdW50ID4gMDsg
fQogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPEZvbnRMb2FkZXI+
OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxGb250TG9hZGVyPjo6ZGVyZWY7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3JlTG9hZEV2
ZW50OyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIEJlZm9yZUxvYWRFdmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAg
ICBCZWZvcmVMb2FkRXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
MCArMzksMTAgQEAgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6On5CZWZvcmVUZXh0SW5zZQogewog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Ojpl
dmVudEludGVyZmFjZSgpIGNvbnN0CiB7CiAgICAgLy8gTm90aWNlIHRoYXQgdGhlcmUgaXMgbm8g
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaWRsLgotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yRXZlbnQ7CisgICAgcmV0dXJuIEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0ZXh0KSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVW5sb2FkRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJldHVyblZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9yZXR1cm5WYWx1ZTsgfQogICAgIHZvaWQgc2V0UmV0dXJu
VmFsdWUoY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZSkgeyBtX3JldHVyblZhbHVlID0gcmV0dXJu
VmFsdWU7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckJlZm9y
ZVVubG9hZEV2ZW50OyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEJlZm9yZVVubG9hZEV2ZW50SW50ZXJmYWNlVHlw
ZTsgfQogCiBwcml2YXRlOgogICAgIEJlZm9yZVVubG9hZEV2ZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0
MSwxMCBAQCBDbGlwYm9hcmRFdmVudDo6fkNsaXBib2FyZEV2ZW50KCkKIHsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBDbGlwYm9hcmRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dEludGVyZmFjZSBDbGlwYm9hcmRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewogICAg
IC8vIE5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIENsaXBib2FyZEV2ZW50LmlkbC4KLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckV2ZW50OworICAgIHJldHVybiBFdmVudEludGVy
ZmFjZVR5cGU7CiB9CiAKIGJvb2wgQ2xpcGJvYXJkRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ2xpcGJvYXJk
RXZlbnQoKTsKICAgICAgICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBQYXNzUmVmUHRyPENsaXBi
b2FyZD4pOwogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZl
bnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICAgICAgdmlydHVhbCBib29sIGlzQ2xp
cGJvYXJkRXZlbnQoKSBjb25zdCBPVkVSUklERTsKIAogICAgICAgICBSZWZQdHI8Q2xpcGJvYXJk
PiBtX2NsaXBib2FyZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5j
cHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOSArNjUsOSBAQCB2b2lkIENvbXBvc2l0aW9u
RXZlbnQ6OmluaXRDb21wb3NpdGlvbkV2CiAgICAgbV9kYXRhID0gZGF0YTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBDb21wb3NpdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50SW50ZXJmYWNlIENvbXBvc2l0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckNvbXBvc2l0aW9uRXZlbnQ7Cisg
ICAgcmV0dXJuIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFj
ZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENvbXBvc2l0aW9uRXZl
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksOSArNTksOSBAQCB2b2lkIEN1c3RvbUV2ZW50Ojppbml0Q3VzdG9tRXZlbnQoY29uc3Qg
CiAgICAgbV9kZXRhaWwgPSBkZXRhaWw7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQ3VzdG9t
RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQ3VzdG9tRXZlbnQ6
OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvckN1c3RvbUV2ZW50OworICAgIHJldHVybiBDdXN0b21FdmVudEludGVyZmFjZVR5cGU7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVu
dC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGlu
aXRDdXN0b21FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBkZXRhaWwpOwogCi0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBjb25zdCBTY3Jp
cHRWYWx1ZSYgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWw7IH0KICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCkgeyByZXR1
cm4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
ZXZpY2VNb3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rl
dmljZU1vdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RldmljZU1vdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDE1
IEBAIHZvaWQgRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb24KICAgICBtX2Rldmlj
ZU1vdGlvbkRhdGEgPSBkZXZpY2VNb3Rpb25EYXRhOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IERldmljZU1vdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNl
IERldmljZU1vdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7CiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckRldmljZU1vdGlvbkV2ZW50OworICAgIHJldHVybiBEZXZpY2VNb3Rpb25FdmVudEludGVyZmFj
ZVR5cGU7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSBz
ZWVtcyB0byBiZSBpbiBhIHN0cmFuZ2Ugc3RhdGUgd2hlcmUKICAgICAvLyBpdCBpcyBoYWxmLWd1
YXJkZWQgYnkgI2lmZGVmcy4gRGV2aWNlTW90aW9uRXZlbnQuaWRsIGlzIGd1YXJkZWQKICAgICAv
LyBidXQgRGV2aWNlTW90aW9uRXZlbnQuY3BwIGl0c2VsZiBpcyByZXF1aXJlZCBieSB1bmdhcmRl
ZCBjb2RlLgotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQ7CisgICAg
cmV0dXJuIEV2ZW50SW50ZXJmYWNlVHlwZTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RldmljZU1vdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogCiAgICAgRGV2aWNlTW90aW9uRGF0YSogZGV2aWNlTW90aW9uRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlTW90aW9uRGF0YS5nZXQoKTsgfQogCi0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
RGV2aWNlTW90aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmll
bnRhdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
T3JpZW50YXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTUg
KzU1LDE1IEBAIHZvaWQgRGV2aWNlT3JpZW50YXRpb25FdmVudDo6aW5pdERldmljZU8KICAgICBt
X29yaWVudGF0aW9uID0gb3JpZW50YXRpb247CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRGV2
aWNlT3JpZW50YXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFj
ZSBEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvckRldmljZU9yaWVudGF0aW9uRXZlbnQ7CisgICAgcmV0dXJuIERldmljZU9yaWVudGF0
aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogI2Vsc2UKICAgICAvLyBGSVhNRTogRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikgc2VlbXMgdG8gYmUgaW4gYSBzdHJhbmdlIHN0YXRlIHdoZXJlCiAgICAg
Ly8gaXQgaXMgaGFsZi1ndWFyZGVkIGJ5ICNpZmRlZnMuIERldmljZU9yaWVudGF0aW9uRXZlbnQu
aWRsIGlzIGd1YXJkZWQKICAgICAvLyBidXQgRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaXRz
ZWxmIGlzIHJlcXVpcmVkIGJ5IHVuZ2FyZGVkIGNvZGUuCi0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JFdmVudDsKKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogI2Vu
ZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uRXZl
bnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVu
dGF0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAK
ICAgICBEZXZpY2VPcmllbnRhdGlvbkRhdGEqIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9vcmllbnRhdGlvbi5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50
SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVu
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw5ICs2OSw5IEBAIEVycm9yRXZlbnQ6On5FcnJvckV2ZW50KCkKIHsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBFcnJvckV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJm
YWNlIEVycm9yRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvckVycm9yRXZlbnQ7CisgICAgcmV0dXJuIEVycm9yRXZlbnRJ
bnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FcnJvckV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
cnJvckV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGxpbmVubygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogICAgIHVu
c2lnbmVkIGNvbG5vKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5OdW1iZXI7IH0KIAotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIEVycm9yRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIx
LDE0ICsxMjEsOSBAQCB2b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nCiAg
ICAgbV9jYW5jZWxhYmxlID0gY2FuY2VsYWJsZUFyZzsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBFdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yRXZlbnQ7Ci19Ci0KLWJvb2wgRXZlbnQ6Omhhc0ludGVyZmFjZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGludGVyZmFjZU5hbWUoKSA9PSBuYW1lOwor
ICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgRXZlbnQ6OmlzVUlFdmVu
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNk
ZWZpbmUgRXZlbnRfaAogCiAjaW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCi0jaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50SW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CkBAIC00Nyw2ICs0NywxNCBAQCBzdHJ1Y3QgRXZlbnRJbml0IHsKICAgICBi
b29sIGNhbmNlbGFibGU7CiB9OwogCitlbnVtIEV2ZW50SW50ZXJmYWNlIHsKKworI2RlZmluZSBE
T01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUobmFtZSkgbmFtZSMjSW50ZXJmYWNlVHlwZSwKK0RP
TV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRSkK
KyN1bmRlZiBET01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUKKworfTsKKwogY2xhc3MgRXZlbnQg
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxFdmVudD4gewogcHVi
bGljOgogICAgIGVudW0gUGhhc2VUeXBlIHsgCkBAIC0xMjAsOCArMTI4LDcgQEAgcHVibGljOgog
CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmREYXRhKCkgY29uc3QgeyByZXR1cm4gaXNDbGlwYm9h
cmRFdmVudCgpID8gY2xpcGJvYXJkKCkgOiAwOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgIGJvb2wgaGFzSW50ZXJmYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZl
bnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGV2ZW50cyBhcmUgZ2VuZXJhbCBj
bGFzc2VzIG9mIGV2ZW50cy4KICAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsy
Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNkZWZpbmUgSU5JVElBTElaRV9FVkVOVF9OQU1F
KG5hbWUpIFwKICAgICAsIG5hbWUjI0V2ZW50KCNuYW1lLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKQogCi0jZGVmaW5lIElOSVRJQUxJWkVfRVZFTlRfSU5URVJGQUNFKG5hbWUp
IFwKLSAgICAsIGludGVyZmFjZUZvciMjbmFtZSgjbmFtZSwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkKLQogRXZlbnROYW1lczo6RXZlbnROYW1lcygpCiAgICAgOiBkdW1teSgw
KQotRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKElOSVRJQUxJWkVfRVZFTlRfTkFNRSkKLURPTV9F
VkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKElOSVRJQUxJWkVfRVZFTlRfSU5URVJGQUNFKQotRE9N
X0VWRU5UX1RBUkdFVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKElOSVRJQUxJWkVfRVZFTlRfSU5URVJG
QUNFKQorICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChJTklUSUFMSVpFX0VWRU5UX05BTUUp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsNiBAQAogI2lmbmRlZiBFdmVudE5hbWVzX2gKICNkZWZpbmUgRXZlbnROYW1lc19oCiAK
LSNpbmNsdWRlICJFdmVudEludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldEludGVy
ZmFjZXMuaCIKICNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAKQEAgLTI2OCw1NyArMjY2LDQzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gZW5kIG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSAogCi0gICAgY2xhc3Mg
RXZlbnROYW1lcyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50TmFtZXMpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgaW50IGR1bW15OyAvLyBOZWVkZWQgdG8g
bWFrZSBpbml0aWFsaXphdGlvbiBtYWNybyB3b3JrLgotICAgICAgICAvLyBQcml2YXRlIHRvIHBy
ZXZlbnQgYWNjaWRlbnRhbCBjYWxsIHRvIEV2ZW50TmFtZXMoKSBpbnN0ZWFkIG9mIGV2ZW50TmFt
ZXMoKQotICAgICAgICBFdmVudE5hbWVzKCk7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRH
bG9iYWxEYXRhOwotCi0gICAgcHVibGljOgotICAgICAgICAjZGVmaW5lIERPTV9FVkVOVF9OQU1F
U19ERUNMQVJFKG5hbWUpIEF0b21pY1N0cmluZyBuYW1lIyNFdmVudDsKLSAgICAgICAgRE9NX0VW
RU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1FU19ERUNMQVJFKQotICAgICAgICAjdW5k
ZWYgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUKLQotICAgICAgICAjZGVmaW5lIERPTV9FVkVOVF9J
TlRFUkZBQ0VfREVDTEFSRShuYW1lKSBBdG9taWNTdHJpbmcgaW50ZXJmYWNlRm9yIyNuYW1lOwot
ICAgICAgICBET01fRVZFTlRfSU5URVJGQUNFU19GT1JfRUFDSChET01fRVZFTlRfSU5URVJGQUNF
X0RFQ0xBUkUpCi0gICAgICAgIERPTV9FVkVOVF9UQVJHRVRfSU5URVJGQUNFU19GT1JfRUFDSChE
T01fRVZFTlRfSU5URVJGQUNFX0RFQ0xBUkUpCi0gICAgICAgICN1bmRlZiBET01fRVZFTlRfSU5U
RVJGQUNFX0RFQ0xBUkUKLQotICAgICAgICBpbmxpbmUgYm9vbCBpc1RvdWNoRXZlbnRUeXBlKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXZlbnRUeXBlID09IHRvdWNoc3RhcnRFdmVudAotICAgICAgICAgICAgICAgIHx8
IGV2ZW50VHlwZSA9PSB0b3VjaG1vdmVFdmVudAotICAgICAgICAgICAgICAgIHx8IGV2ZW50VHlw
ZSA9PSB0b3VjaGVuZEV2ZW50Ci0gICAgICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IHRvdWNo
Y2FuY2VsRXZlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgYm9vbCBpc0dlc3R1cmVF
dmVudFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBldmVudFR5cGUgPT0gZ2VzdHVyZXRhcEV2ZW50Ci0gICAgICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGdlc3R1cmV0YXBkb3duRXZlbnQKLSAgICAgICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXNjcm9sbHN0YXJ0RXZlbnQKLSAgICAgICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXNjcm9sbGVuZEV2ZW50Ci0gICAgICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGdlc3R1cmVzY3JvbGx1cGRhdGVFdmVudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvdWNoRXZlbnROYW1lcygpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IG5hbWVzOwotICAgICAg
ICAgICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KDQpOwotICAgICAgICAgICAgbmFtZXMuYXBwZW5k
KHRvdWNoc3RhcnRFdmVudCk7Ci0gICAgICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2htb3ZlRXZl
bnQpOwotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvdWNoZW5kRXZlbnQpOwotICAgICAgICAg
ICAgbmFtZXMuYXBwZW5kKHRvdWNoY2FuY2VsRXZlbnQpOwotICAgICAgICAgICAgcmV0dXJuIG5h
bWVzOwotICAgICAgICB9Ci0gICAgfTsKK2NsYXNzIEV2ZW50TmFtZXMgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEV2ZW50TmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBp
bnQgZHVtbXk7IC8vIE5lZWRlZCB0byBtYWtlIGluaXRpYWxpemF0aW9uIG1hY3JvIHdvcmsuCisg
ICAgLy8gUHJpdmF0ZSB0byBwcmV2ZW50IGFjY2lkZW50YWwgY2FsbCB0byBFdmVudE5hbWVzKCkg
aW5zdGVhZCBvZiBldmVudE5hbWVzKCkKKyAgICBFdmVudE5hbWVzKCk7CisgICAgZnJpZW5kIGNs
YXNzIFRocmVhZEdsb2JhbERhdGE7CisKK3B1YmxpYzoKKyAgICAjZGVmaW5lIERPTV9FVkVOVF9O
QU1FU19ERUNMQVJFKG5hbWUpIEF0b21pY1N0cmluZyBuYW1lIyNFdmVudDsKKyAgICBET01fRVZF
TlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUpCisgICAgI3VuZGVmIERP
TV9FVkVOVF9OQU1FU19ERUNMQVJFCiAKLSAgICBpbmxpbmUgRXZlbnROYW1lcyYgZXZlbnROYW1l
cygpCisgICAgaW5saW5lIGJvb2wgaXNUb3VjaEV2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRh
KCkuZXZlbnROYW1lcygpOworICAgICAgICByZXR1cm4gZXZlbnRUeXBlID09IHRvdWNoc3RhcnRF
dmVudAorICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IHRvdWNobW92ZUV2ZW50CisgICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2hlbmRFdmVudAorICAgICAgICAgICAgfHwgZXZlbnRU
eXBlID09IHRvdWNoY2FuY2VsRXZlbnQ7CiAgICAgfQogCisgICAgVmVjdG9yPEF0b21pY1N0cmlu
Zz4gdG91Y2hFdmVudE5hbWVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3RvcjxBdG9taWNT
dHJpbmc+IG5hbWVzOworICAgICAgICBuYW1lcy5yZXNlcnZlQ2FwYWNpdHkoNCk7CisgICAgICAg
IG5hbWVzLmFwcGVuZCh0b3VjaHN0YXJ0RXZlbnQpOworICAgICAgICBuYW1lcy5hcHBlbmQodG91
Y2htb3ZlRXZlbnQpOworICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hlbmRFdmVudCk7CisgICAg
ICAgIG5hbWVzLmFwcGVuZCh0b3VjaGNhbmNlbEV2ZW50KTsKKyAgICAgICAgcmV0dXJuIG5hbWVz
OworICAgIH0KK307CisKK2lubGluZSBFdmVudE5hbWVzJiBldmVudE5hbWVzKCkKK3sKKyAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmV2ZW50TmFtZXMoKTsKK30KKwogfQogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lck1hcC5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldEludGVyZmFjZXMuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nSGFzaC5oPgpAQCAtOTksMTIgKzEwMCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIE93blB0cjxGaXJpbmdFdmVudEl0ZXJhdG9yVmVjdG9yPiBmaXJpbmdFdmVu
dEl0ZXJhdG9yczsKICAgICB9OwogCisgICAgZW51bSBFdmVudFRhcmdldEludGVyZmFjZSB7CisK
KyAgICAjZGVmaW5lIERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRShuYW1lKSBuYW1lIyNFdmVu
dFRhcmdldEludGVyZmFjZVR5cGUsCisgICAgRE9NX0VWRU5UX1RBUkdFVF9JTlRFUkZBQ0VTX0ZP
Ul9FQUNIKERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRSkKKyAgICAjdW5kZWYgRE9NX0VWRU5U
X0lOVEVSRkFDRV9ERUNMQVJFCisKKyAgICB9OworCiAgICAgY2xhc3MgRXZlbnRUYXJnZXQgewog
ICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCByZWYoKSB7IHJlZkV2ZW50VGFyZ2V0KCk7IH0KICAg
ICAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZFdmVudFRhcmdldCgpOyB9CiAKLSAgICAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIE5vZGUqIHRv
Tm9kZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw5ICszOSw5IEBAIEZvY3VzRXZlbnRJbml0OjpGb2N1c0V2ZW50SW5pdCgpCiB7CiB9CiAK
LWNvbnN0IEF0b21pY1N0cmluZyYgRm9jdXNFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudEludGVyZmFjZSBGb2N1c0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JGb2N1c0V2ZW50OworICAgIHJldHVybiBG
b2N1c0V2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBGb2N1c0V2ZW50Ojppc0ZvY3VzRXZl
bnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQogICAgIHZvaWQgc2V0UmVsYXRl
ZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KSB7IG1fcmVsYXRl
ZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzRXZlbnQoKSBj
b25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQuY3BwCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDEwIEBAIHZvaWQgR2VzdHVyZUV2ZW50Ojppbml0
R2VzdHVyZUV2ZW50KGNvbnMKICAgICBpbml0Q29vcmRpbmF0ZXMoSW50UG9pbnQoY2xpZW50WCwg
Y2xpZW50WSkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEdlc3R1cmVFdmVudDo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBHZXN0dXJlRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFt
ZSwgKCJUQkRJbnRlcmZhY2UiKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgLy8gRklYTUU6IFRo
aXMgbWFrZXMgaXQgc28gd2UgbmV2ZXIgd3JhcCBHZXN0dXJlRXZlbnRzIGluIHRoZSByaWdodCBi
aW5kaW5ncy4KKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBHZXN0dXJlRXZl
bnQ6Okdlc3R1cmVFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5oCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbml0R2VzdHVy
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
LCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwgYm9v
bCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBmbG9h
dCBkZWx0YVgsIGZsb2F0IGRlbHRhWSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZl
bnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIGZsb2F0IGRlbHRhWCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVsdGFYOyB9CiAgICAgZmxvYXQgZGVsdGFZKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBvbGRVUkwoKSBj
b25zdCB7IHJldHVybiBtX29sZFVSTDsgfQogICAgIGNvbnN0IFN0cmluZyYgbmV3VVJMKCkgY29u
c3QgeyByZXR1cm4gbV9uZXdVUkw7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckhhc2hDaGFuZ2VFdmVudDsgfQorICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRl
cmZhY2UoKSBjb25zdCB7IHJldHVybiBIYXNoQ2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBlOyB9CiAK
IHByaXZhdGU6CiAgICAgSGFzaENoYW5nZUV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vS2V5
Ym9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDkgKzE4OCw5IEBAIGludCBL
ZXlib2FyZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4odGV4dC5jaGFyYWN0ZXJTdGFydGluZ0F0KDApKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBLZXlib2FyZEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEtl
eWJvYXJkRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvcktleWJvYXJkRXZlbnQ7CisgICAgcmV0dXJuIEtleWJvYXJkRXZl
bnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIEtleWJvYXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVu
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgaW50IGtleUNvZGUoKSBjb25zdDsg
Ly8ga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBjaGFyYWN0ZXIgZm9yIGtleXByZXNz
CiAgICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7IC8vIGNoYXJhY3RlciBjb2RlIGZvciBrZXlwcmVz
cywgMCBmb3Iga2V5ZG93biBhbmQga2V5dXAKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw5ICsxNjYsOSBA
QCB2b2lkIE1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChjb25zCiAgICAgaW5pdE1lc3Nh
Z2VFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIGRhdGEsIG9yaWdpbiwgbGFzdEV2
ZW50SWQsIHNvdXJjZSwgcG9ydHMucmVsZWFzZSgpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBNZXNzYWdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgTWVz
c2FnZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JNZXNzYWdlRXZlbnQ7CisgICAgcmV0dXJuIE1lc3NhZ2VFdmVudElu
dGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTWVzc2FnZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6
CiAgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0KCk7CiAgICAgdm9pZCBpbml0TWVzc2FnZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2Vs
YWJsZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSwg
TWVzc2FnZVBvcnQqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZh
Y2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0OwogCiAgICAgZW51bSBEYXRhVHlwZSB7CiAgICAgICAgIERhdGFUeXBlU2NyaXB0
VmFsdWUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw5ICsxNTEsOSBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpjb250ZXh0RGVzdHJveWVkKCkK
ICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOwogfQogCi1jb25zdCBBdG9taWNTdHJp
bmcmIE1lc3NhZ2VQb3J0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJm
YWNlIE1lc3NhZ2VQb3J0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZXNzYWdlUG9ydDsKKyAgICByZXR1cm4gTWVz
c2FnZVBvcnRFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIE1lc3NhZ2VQb3J0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAK
LSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsK
ICAgICAgICAgdmlydHVhbCBib29sIGlzTWVzc2FnZVBvcnQoKSBjb25zdCBPVkVSUklERSBGSU5B
TCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc1LDkgKzE3NSw5IEBAIHZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNl
RXZlbnQoY29uc3QgQXQKICAgICAvLyBGSVhNRTogbV9jbGlwYm9hcmQgaXMgbm90IHNldCB0byAw
IGhlcmUuCiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTW91c2VFdmVudDo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNb3VzZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNb3VzZUV2ZW50Owor
ICAgIHJldHVybiBNb3VzZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBNb3VzZUV2ZW50
Ojppc01vdXNlRXZlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIENsaXBib2FyZCogZGF0YVRy
YW5zZmVyKCkgY29uc3QgeyByZXR1cm4gaXNEcmFnRXZlbnQoKSA/IG1fY2xpcGJvYXJkLmdldCgp
IDogMDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkgQEAgdm9pZCBNdXRhdGlv
bkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjbwogICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFu
Z2U7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTXV0YXRpb25FdmVudDo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNdXRhdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNdXRhdGlvbkV2
ZW50OworICAgIHJldHVybiBNdXRhdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5oCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
U3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZTsgfQogICAgICAgICB1
bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyQ2hhbmdlOyB9
CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTXV0YXRpb25FdmVudCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIzLDkgKzE4MjMsOSBAQCBOb2RlKiBOb2RlOjplbmNs
b3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFj
ZSBOb2RlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JOb2RlOworICAgIHJldHVybiBOb2RlRXZlbnRUYXJnZXRJbnRl
cmZhY2VUeXBlOwogfQogCiB2b2lkIE5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50
KiBvbGREb2N1bWVudCkKQEAgLTIxOTIsNyArMjE5Miw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXYKICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKS5oYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICNlbmRpZgogICAgIH0g
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCkgewotICAg
ICAgICBpZiAoZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4
dEV2ZW50KSkKKyAgICAgICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVu
dEludGVyZmFjZVR5cGUpCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0
VGV4dElucHV0RXZlbnRIYW5kbGVyKHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KSk7CiAj
aWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCkBAIC0yMjEyLDcgKzIyMTIsNyBAQCB2b2lkIE5vZGU6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICNlbmRpZgotICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2hlZWxF
dmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgZXZl
bnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkpIHsK
KyAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2ZW50LT5ldmVu
dEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgIFdoZWVs
RXZlbnQqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBzZW5kIHRoZSB3
aGVlbCBldmVudCB0byB0aGUgZmlyc3Qgbm9kZSB3ZSBmaW5kIHdpdGggYSByZW5kZXJlci4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIE5vZGUqIHRvTm9kZSgpOwogICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1
dEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOyAvLyBJbXBsZW1lbnRlZCBpbiBEb2N1bWVudC5oCiAKICAgICB2aXJ0dWFsIGJvb2wg
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9PdmVyZmxvd0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
T3ZlcmZsb3dFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBPdmVy
Zmxvd0V2ZW50OjpPdmVyZmxvd0V2ZW50KGNvbnN0IEF0b21pCiB7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgT3ZlcmZsb3dFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVy
ZmFjZSBPdmVyZmxvd0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPdmVyZmxvd0V2ZW50OworICAgIHJldHVybiBPdmVy
Zmxvd0V2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogdm9pZCBPdmVyZmxvd0V2ZW50Ojppbml0T3Zl
cmZsb3dFdmVudCh1bnNpZ25lZCBzaG9ydCBvcmllbnQsIGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93
LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vT3ZlcmZs
b3dFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50
LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3ZlcmZsb3c7IH0K
ICAgICBib29sIHZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsT3Zl
cmZsb3c7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIE92ZXJmbG93RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsOSArNTYsOSBAQCBQYWdlVHJhbnNpdGlvbkV2ZW50Ojp+UGFnZVRyYW5zaXRpb25FdmVu
CiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUGFnZVRyYW5zaXRpb25FdmVudDo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBQYWdlVHJhbnNpdGlvbkV2ZW50OjpldmVu
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JQYWdlVHJhbnNpdGlvbkV2ZW50OworICAgIHJldHVybiBQYWdlVHJhbnNpdGlvbkV2ZW50SW50
ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflBhZ2VUcmFuc2l0aW9uRXZlbnQo
KTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0Owog
CiAgICAgYm9vbCBwZXJzaXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlZDsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDkgKzc4LDkgQEAgUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBQb3BTdGF0ZUV2ZW50Ogog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9wU3RhdGVFdmVudCh0eXBlLCBpbml0aWFsaXplcikp
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFBvcFN0YXRlRXZlbnQ6OmludGVyZmFjZU5hbWUo
KSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUG9wU3RhdGVFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBj
b25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUG9wU3RhdGVFdmVu
dDsKKyAgICByZXR1cm4gUG9wU3RhdGVFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAkocmV2aXNp
b24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2NyaXB0VmFsdWUm
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIEhpc3RvcnkqIGhpc3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudElu
dGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFBvcFN0YXRl
RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5jcHAJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBQcm9ncmVzc0V2ZW50OjpQcm9ncmVzc0V2ZW50KGNv
bnN0IEF0b21pCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUHJvZ3Jlc3NFdmVudDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBQcm9ncmVzc0V2ZW50OjpldmVudElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQ
cm9ncmVzc0V2ZW50OworICAgIHJldHVybiBQcm9ncmVzc0V2ZW50SW50ZXJmYWNlVHlwZTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2FkZWQ7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwo
KSBjb25zdCB7IHJldHVybiBtX3RvdGFsOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIFByb2dyZXNzRXZlbnQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5UG9saWN5VmlvbGF0
aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VGaWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VGaWxlOyB9CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVOdW1iZXI7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNlY3VyaXR5UG9s
aWN5VmlvbGF0aW9uRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50
ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudEludGVy
ZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDkg
KzExNCw5IEBAIHZvaWQgVGV4dEV2ZW50Ojppbml0VGV4dEV2ZW50KGNvbnN0IEF0b20KICAgICBt
X2RhdGEgPSBkYXRhOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRleHRFdmVudDo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBUZXh0RXZlbnQ6OmV2ZW50SW50ZXJmYWNl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRFdmVu
dDsKKyAgICByZXR1cm4gVGV4dEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICAgICAgU3RyaW5nIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBpc0xpbmVCcmVh
aygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0TGluZUJyZWFr
OyB9CiAgICAgICAgIGJvb2wgaXNDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRU
eXBlID09IFRleHRFdmVudElucHV0Q29tcG9zaXRpb247IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ub3VjaEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2hFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3Vj
aEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsOSBAQCB2b2lkIFRvdWNoRXZl
bnQ6OmluaXRUb3VjaEV2ZW50KFRvdWNoTGlzCiAKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBU
b3VjaEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRvdWNoRXZl
bnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclRvdWNoRXZlbnQ7CisgICAgcmV0dXJuIFRvdWNoRXZlbnRJbnRlcmZhY2VUeXBl
OwogfQogCiBib29sIFRvdWNoRXZlbnQ6OmlzVG91Y2hFdmVudCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ub3VjaEV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ub3VjaEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzVG91Y2hFdmVudCgpIGNvbnN0IE9WRVJSSURFOwog
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgVG91Y2hFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyYW5z
aXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyYW5zaXRp
b25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmFu
c2l0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIGNvbnN0IFN0
cmluZyYgVHJhbnNpdGlvbkV2ZW50Ojpwc2V1ZG9FbGUKICAgICByZXR1cm4gbV9wc2V1ZG9FbGVt
ZW50OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRyYW5zaXRpb25FdmVudDo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBUcmFuc2l0aW9uRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRyYW5z
aXRpb25FdmVudDsKKyAgICByZXR1cm4gVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyYW5z
aXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmFuc2l0aW9u
RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyYW5zaXRp
b25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBk
b3VibGUgZWxhcHNlZFRpbWUoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHBzZXVkb0VsZW1l
bnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFRyYW5zaXRpb25FdmVudCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9VSUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VJ
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw5ICs5MCw5IEBAIGJvb2wgVUlFdmVudDo6
aXNVSUV2ZW50KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBVSUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFVJRXZl
bnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclVJRXZlbnQ7CisgICAgcmV0dXJuIFVJRXZlbnRJbnRlcmZhY2VUeXBlOwogfQog
CiBpbnQgVUlFdmVudDo6a2V5Q29kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VUlFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIEFic3RyYWN0Vmlldyogdmlldygp
IGNvbnN0IHsgcmV0dXJuIG1fdmlldy5nZXQoKTsgfQogICAgIGludCBkZXRhaWwoKSBjb25zdCB7
IHJldHVybiBtX2RldGFpbDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50
ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBpbnQga2V5Q29kZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw5ICs2OSw5IEBAIGRvdWJsZSBXZWJLaXRBbmltYXRpb25FdmVudDo6ZWxhcHNlZFRpbWUKICAg
ICByZXR1cm4gbV9lbGFwc2VkVGltZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJLaXRB
bmltYXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBXZWJL
aXRBbmltYXRpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViS2l0QW5pbWF0aW9uRXZlbnQ7CisgICAgcmV0dXJu
IFdlYktpdEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25F
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUoKSBjb25zdDsKICAgICBkb3VibGUgZWxhcHNlZFRpbWUo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
MCw5ICsyNDAsOSBAQCB2b2lkIFdlYktpdE5hbWVkRmxvdzo6ZGlzcGF0Y2hSZWdpb25PdmVyCiAg
ICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgV2ViS2l0
TmFtZWRGbG93OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFdl
YktpdE5hbWVkRmxvdzo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVy
biBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViS2l0TmFtZWRGbG93OworICAgIHJldHVybiBX
ZWJLaXROYW1lZEZsb3dFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIFdlYktpdE5hbWVkRmxvdzo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5oCShyZXZpc2lvbiAxNTYy
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0
TmFtZWRGbG93Pjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0TmFtZWRGbG93Pjo6
ZGVyZWY7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRl
cmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGZyb20gdGhlIEpTIGJpbmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIE5hbWVkRmxv
dyBvYmplY3QgaXMgcmVhY2hhYmxlIG9yIG5vdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOSArNzUsOSBAQCBjb25zdCBTdHJpbmcmIFdlYktpdFRyYW5zaXRpb25FdmVudDo6cHNlCiAg
ICAgcmV0dXJuIG1fcHNldWRvRWxlbWVudDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJL
aXRUcmFuc2l0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2Ug
V2ViS2l0VHJhbnNpdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJLaXRUcmFuc2l0aW9uRXZlbnQ7CisgICAg
cmV0dXJuIFdlYktpdFRyYW5zaXRpb25FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlv
bkV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRU
cmFuc2l0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiAgICAgZG91YmxlIGVsYXBzZWRUaW1lKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBwc2V1
ZG9FbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRl
cmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDkg
KzExNSw5IEBAIHZvaWQgV2hlZWxFdmVudDo6aW5pdFdlYktpdFdoZWVsRXZlbnQoaW4KICAgICAg
ICAgICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KTsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBXaGVlbEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50SW50ZXJmYWNlIFdoZWVsRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQ7CisgICAgcmV0dXJuIFdo
ZWVsRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIFdoZWVsRXZlbnQ6OmlzTW91c2VFdmVu
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDcgKzkzLDcgQEAgcHVibGljOgogICAgIC8vIE5lZWRlZCBmb3IgT2JqZWN0aXZlLUMgbGVnYWN5
IHN1cHBvcnQKICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxE
ZWx0YS54KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMTU2
MjM0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksOSArNjksOSBAQCBGaWxlUmVhZGVyOjp+RmlsZVJlYWRlcigpCiAgICAgdGVy
bWluYXRlKCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRmlsZVJlYWRlcjo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBGaWxlUmVhZGVyOjpldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JGaWxlUmVhZGVyOworICAgIHJldHVybiBGaWxlUmVhZGVyRXZlbnRUYXJnZXRJbnRlcmZhY2VU
eXBlOwogfQogCiBib29sIEZpbGVSZWFkZXI6OmNhblN1c3BlbmQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc3RyaW5nUmVzdWx0KCk7CiAKICAgICAvLyBFdmVudFRh
cmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOyB9CiAKICAgICAvLyBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OnVwZGF0ZUZvY3VzQXBwCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50
LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aGFzSW50
ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQorICAgIGlmIChyZW5kZXJlcigpICYmIChl
dmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgZm9yd2FyZEV2ZW50KGV2ZW50
KTsKICAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KCkpCiAgICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHN0YXRpY19j
YXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ5LDkg
KzY0OSw5IEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpyZXR1cm5Ub1JlYWx0aW1lKCkKICAgICAg
ICAgbV9tZWRpYUVsZW1lbnRzW2luZGV4XS0+cmV0dXJuVG9SZWFsdGltZSgpOwogfQogCi1jb25z
dCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbGxlcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudFRhcmdldEludGVyZmFjZSBNZWRpYUNvbnRyb2xsZXI6OmV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhQ29u
dHJvbGxlcjsKKyAgICByZXR1cm4gTWVkaWFDb250cm9sbGVyRXZlbnRUYXJnZXRJbnRlcmZhY2VU
eXBlOwogfQogCiAvLyBUaGUgc3BlYyBzYXlzIHRvIGZpcmUgcGVyaW9kaWMgdGltZXVwZGF0ZSBl
dmVudHMgKHRob3NlIHNlbnQgd2hpbGUgcGxheWluZykgZXZlcnkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSBPVkVSUklERSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSBPVkVSUklERSB7IGRlcmVmKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH07CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0
YTsgfQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhJiBlbnN1cmVFdmVudFRhcmdldERhdGEo
KSBPVkVSUklERSB7IHJldHVybiBtX2V2ZW50VGFyZ2V0RGF0YTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL01lZGlhS2V5RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL01lZGlhS2V5RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSw5
IEBAIE1lZGlhS2V5RXZlbnQ6On5NZWRpYUtleUV2ZW50KCkKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYUtleUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJm
YWNlIE1lZGlhS2V5RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhS2V5RXZlbnQ7CisgICAgcmV0dXJuIE1lZGlh
S2V5RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhS2V5RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhS2V5RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUtleUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhS2V5RXZl
bnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIFN0cmluZyBrZXlTeXN0ZW0oKSBjb25z
dCB7IHJldHVybiBtX2tleVN5c3RlbTsgfQogICAgIFN0cmluZyBzZXNzaW9uSWQoKSBjb25zdCB7
IHJldHVybiBtX3Nlc3Npb25JZDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmZvcndhcmRFdmVudChFdgogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChlbGVtZW50KCkucmVuZGVyZXIoKSAmJiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5oYXNJbnRl
cmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpIHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5mb2N1c0V2ZW50KSkgeworICAgIGlmIChlbGVtZW50KCkucmVuZGVyZXIoKSAmJiAoZXZl
bnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5ldmVu
dEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlIHx8IGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5mb2N1c0V2ZW50KSkgewogICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJl
bmRlclRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgp
LnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Ymx1ckV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJl
ciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCkpIHsKQEAgLTE5OCw3ICsxOTgsNyBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50CiAKIGJvb2wgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsKLSAg
ICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYm
IGV2ZW50LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRFdmVudCkg
JiYgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpLT5kYXRhKCkgPT0gIlxuIikgfHwgSW5w
dXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKKyAgICByZXR1cm4gKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIGV2ZW50LT5ldmVudElu
dGVyZmFjZSgpID09IFRleHRFdmVudEludGVyZmFjZVR5cGUgJiYgc3RhdGljX2Nhc3Q8VGV4dEV2
ZW50Kj4oZXZlbnQpLT5kYXRhKCkgPT0gIlxuIikgfHwgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJ
bXBsaWNpdGx5KGV2ZW50KTsKIH0KIAogUmVuZGVyRWxlbWVudCogVGV4dEZpZWxkSW5wdXRUeXBl
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSYgYXJlbmEsIFJlbmRlclN0eWxlJikgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVu
dC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29udGV4dEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBXZWJH
TENvbnRleHRFdmVudDo6fldlYkdMQ29udGV4dEV2ZW50KCkKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBXZWJHTENvbnRleHRFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudElu
dGVyZmFjZSBXZWJHTENvbnRleHRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2ViR0xDb250ZXh0RXZlbnQ7CisgICAg
cmV0dXJuIFdlYkdMQ29udGV4dEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bnRleHRFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdHVzTWVzc2FnZTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50
SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xDb250ZXh0RXZlbnQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0Fw
cGxlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sc0FwcGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDkgKzYwMSw3IEBA
IHZvaWQgTWVkaWFDb250cm9sc0FwcGxlRXZlbnRMaXN0ZW5lcjo6aGEKIHsKICAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKICAgICAgICAgbV9tZWRpYUNv
bnRyb2xzLT5oYW5kbGVDbGlja0V2ZW50KGV2ZW50KTsKLQotICAgIGVsc2UgaWYgKChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKLSAgICAgICAgJiYgZXZlbnQtPmhhc0ludGVyZmFj
ZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkpIHsKKyAgICBlbHNlIGlmICgo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2ZW50LT5ldmVudEludGVyZmFj
ZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgIFdoZWVsRXZlbnQqIHdo
ZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpOwogICAgICAgICBpZiAo
bV9tZWRpYUNvbnRyb2xzLT5zaG91bGRDbG9zZWRDYXB0aW9uc0NvbnRhaW5lclByZXZlbnRQYWdl
U2Nyb2xsaW5nKHdoZWVsRXZlbnQtPndoZWVsRGVsdGFZKCkpKQogICAgICAgICAgICAgZXZlbnQt
PnByZXZlbnREZWZhdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGlu
QnV0dG9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSw3ICsxNTEsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJkRXZlbnQoRXZl
CiAgICAgaWYgKCFyZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFldmVu
dC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkKKyAg
ICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9zcGluQnV0dG9uT3duZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDkgQEAgQXVkaW9UcmFjayogQXVkaW9UcmFja0xp
c3Q6OmdldFRyYWNrQnlJZAogICAgIHJldHVybiAwOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IEF1ZGlvVHJhY2tMaXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJm
YWNlIEF1ZGlvVHJhY2tMaXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb1RyYWNrTGlzdDsKKyAgICByZXR1
cm4gQXVkaW9UcmFja0xpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuaAkocmV2aXNp
b24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVu
ZChQYXNzUmVmUHRyPEF1ZGlvVHJhY2s+KTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgQXVkaW9UcmFja0xpc3QoSFRNTE1lZGlh
RWxlbWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDkgKzE0
Nyw5IEBAIFRleHRUcmFjazo6flRleHRUcmFjaygpCiAgICAgY2xlYXJDbGllbnQoKTsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBUZXh0VHJhY2s6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRUYXJnZXRJbnRlcmZhY2UgVGV4dFRyYWNrOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0VHJhY2s7CisgICAg
cmV0dXJuIFRleHRUcmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogVGV4dFRyYWNrOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgflRleHRUcmFj
aygpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICBzdGF0aWMgVGV4dFRyYWNrKiBjYXB0aW9u
TWVudU9mZkl0ZW0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1NCw5ICsxMTU0LDkgQEAgc3Rk
OjpwYWlyPGRvdWJsZSwgZG91YmxlPiBUZXh0VHJhY2tDdWU6OgogICAgIHJldHVybiBtX2Rpc3Bs
YXlQb3NpdGlvbjsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0VHJhY2tDdWU6OmludGVy
ZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgVGV4dFRyYWNrQ3VlOjpldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JUZXh0VHJhY2tDdWU7CisgICAgcmV0dXJuIFRleHRUcmFja0N1ZUV2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogVGV4dFRyYWNrQ3Vl
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2tDdWUuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1
Myw3IEBAIHB1YmxpYzoKICAgICBpbnQgY2FsY3VsYXRlQ29tcHV0ZWRMaW5lUG9zaXRpb24oKTsK
ICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IGdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
PiBnZXRDU1NQb3NpdGlvbigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0xpc3QuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsOSAr
MjIzLDkgQEAgYm9vbCBUZXh0VHJhY2tMaXN0Ojpjb250YWlucyhUcmFja0Jhc2UqIAogICAgIHJl
dHVybiB0cmFja3MtPmZpbmQodHJhY2spICE9IG5vdEZvdW5kOwogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIFRleHRUcmFja0xpc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgVGV4dFRyYWNrTGlzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dFRyYWNrTGlzdDsKKyAgICBy
ZXR1cm4gVGV4dFRyYWNrTGlzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaAkocmV2aXNp
b24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmUoVHJhY2tCYXNlKikgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIFRleHRUcmFja0xpc3QoSFRNTE1l
ZGlhRWxlbWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
OSArNTIsOSBAQCBUcmFja0V2ZW50Ojp+VHJhY2tFdmVudCgpCiB7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgVHJhY2tFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFj
ZSBUcmFja0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JUcmFja0V2ZW50OworICAgIHJldHVybiBUcmFja0V2ZW50SW50
ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFja0V2ZW50KHR5
cGUsIGluaXRpYWxpemVyKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2
ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKICAgICBUcmFja0Jhc2UqIHRyYWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFjay5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrTGlzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrTGlzdEJhc2UuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UcmFja0xpc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoVHJhY2tCYXNlKik7CiAKICAgICAvLyBF
dmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdCA9IDA7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxUcmFja0xpc3RC
YXNlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8VHJhY2tMaXN0QmFzZT46OmRlcmVmOwog
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw5ICs5MCw5IEBAIGxvbmcgVmlkZW9UcmFja0xpc3Q6OnNlbGVjdGVkSW5kZXgoKSBjb24K
ICAgICByZXR1cm4gLTE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVmlkZW9UcmFja0xpc3Q6
OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgVmlkZW9UcmFja0xp
c3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvclZpZGVvVHJhY2tMaXN0OworICAgIHJldHVybiBWaWRlb1RyYWNrTGlz
dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Vmlk
ZW9UcmFjaz4pOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsK
IAogcHJpdmF0ZToKICAgICBWaWRlb1RyYWNrTGlzdChIVE1MTWVkaWFFbGVtZW50KiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOSArMTA0LDkgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNh
Y2hlOjphYm9ydCgpCiAgICAgICAgIGNhY2hlSG9zdC0+YWJvcnQoKTsKIH0KIAotY29uc3QgQXRv
bWljU3RyaW5nJiBET01BcHBsaWNhdGlvbkNhY2hlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50VGFyZ2V0SW50ZXJmYWNlIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckRPTUFw
cGxpY2F0aW9uQ2FjaGU7CisgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0
aW9uQ2FjaGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNhY2hlZCk7CiAgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihvYnNvbGV0ZSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
IAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRvRXZlbnRUeXBlKEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpFdmVudElEIGlkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI0LDkgKzQyNCw5IEBAIERPTVdpbmRvdzo6fkRPTVdpbmRvdygp
CiAgICAgcmVtb3ZlQWxsQmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5lcnModGhpcyk7CiB9CiAKLWNv
bnN0IEF0b21pY1N0cmluZyYgRE9NV2luZG93OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
VGFyZ2V0SW50ZXJmYWNlIERPTVdpbmRvdzo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRE9NV2luZG93OworICAgIHJl
dHVybiBET01XaW5kb3dFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIERPTVdpbmRvdzo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHRoZSBuZXR3b3JrIGxvYWQuIFNlZSBh
bHNvIFNlY3VyaXR5Q29udGV4dDo6aXNTZWN1cmVUcmFuc2l0aW9uVG8uCiAgICAgICAgIHZvaWQg
ZGlkU2VjdXJlVHJhbnNpdGlvblRvKERvY3VtZW50Kik7CiAKLSAgICAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIERPTVdpbmRvdyogdG9ET01XaW5kb3coKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5
LDkgKzIwOSw5IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmNsb3NlKCkKICAgICB9CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgRXZlbnRTb3VyY2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgRXZlbnRTb3VyY2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckV2ZW50U291cmNlOworICAg
IHJldHVybiBFdmVudFNvdXJjZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogRXZlbnRTb3VyY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6
cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+OjpkZXJlZjsKIAotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3Jt
YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5j
cHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2Nyw5IEBAIFBlcmZvcm1hbmNlOjp+UGVyZm9y
bWFuY2UoKQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFBlcmZvcm1hbmNlOjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFBlcmZvcm1hbmNlOjpldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JQZXJmb3JtYW5jZTsKKyAgICByZXR1cm4gUGVyZm9ybWFuY2VFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFBlcmZvcm1hbmNlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGVyZm9ybWFuY2U+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQZXJmb3JtYW5jZShmcmFtZSkpOyB9CiAgICAgflBlcmZvcm1hbmNlKCk7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKIAogICAgIFBlcmZvcm1hbmNlTmF2aWdhdGlvbiogbmF2aWdhdGlvbigp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmgJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIFNwZWVjaElucHV0
UmVzdWx0TGlzdCogcmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0cy5nZXQoKTsgfQog
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgU3BlZWNoSW5wdXRFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBA
IHZvaWQgU3RvcmFnZUV2ZW50Ojppbml0U3RvcmFnZUV2ZW50KGNvbnMKICAgICBtX3N0b3JhZ2VB
cmVhID0gc3RvcmFnZUFyZWE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU3RvcmFnZUV2ZW50
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFN0b3JhZ2VFdmVudDo6ZXZl
bnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yU3RvcmFnZUV2ZW50OworICAgIHJldHVybiBTdG9yYWdlRXZlbnRJbnRlcmZhY2VUeXBlOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgog
ICAgIC8vIE5lZWRlZCBvbmNlIHdlIHN1cHBvcnQgaW5pdDxibGFuaz5FdmVudE5TCiAgICAgLy8g
dm9pZCBpbml0U3RvcmFnZUV2ZW50TlMoaW4gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwgaW4gRE9N
U3RyaW5nIHR5cGVBcmcsIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNl
bGFibGVBcmcsIGluIERPTVN0cmluZyBrZXlBcmcsIGluIERPTVN0cmluZyBvbGRWYWx1ZUFyZywg
aW4gRE9NU3RyaW5nIG5ld1ZhbHVlQXJnLCBpbiBET01TdHJpbmcgdXJsQXJnLCBTdG9yYWdlIHN0
b3JhZ2VBcmVhQXJnKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZh
Y2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0b3JhZ2VFdmVudCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTEsOSArMjExLDkgQEAgdm9pZCBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVB
bGxJbgogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBTVkdFbGVtZW50SW5zdGFuY2U6OmV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFj
ZUZvclNWR0VsZW1lbnRJbnN0YW5jZTsKKyAgICByZXR1cm4gU1ZHRWxlbWVudEluc3RhbmNlRXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBTVkdF
bGVtZW50SW5zdGFuY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyZW50Tm9kZShTVkdFbGVt
ZW50SW5zdGFuY2UqIGluc3RhbmNlKSB7IG1fcGFyZW50SW5zdGFuY2UgPSBpbnN0YW5jZTsgfQog
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwg
Ym9vbCB1c2VDYXB0dXJlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOSBAQCBTVkdQb2ludCBTVkdab29tRXZlbnQ6Om5l
d1RyYW5zbGF0ZSgpIGNvCiAgICAgcmV0dXJuIG1fbmV3VHJhbnNsYXRlOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIFNWR1pvb21FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudElu
dGVyZmFjZSBTVkdab29tRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNWR1pvb21FdmVudDsKKyAgICByZXR1cm4gU1ZH
Wm9vbUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHB1YmxpYzoKIAogICAgIFNWR1BvaW50IG5ld1RyYW5zbGF0ZSgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgU1ZHWm9vbUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGU6On5EZWRpY2F0ZWRXbwogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJm
YWNlIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZTsKKyAgICByZXR1cm4gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVFdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIHZvaWQgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGU6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
LCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdXJscywgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwogCiAgICAgICAgIC8vIEV2
ZW50VGFyZ2V0Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAgICAgICB2b2lk
IHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgTWVz
c2FnZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgLy8gTmVlZGVkIGZvciBP
YmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCkuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDkgKzg3
LDkgQEAgU2hhcmVkV29ya2VyOjp+U2hhcmVkV29ya2VyKCkKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBTaGFyZWRXb3JrZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgU2hhcmVkV29ya2VyOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTaGFyZWRXb3JrZXI7CisgICAgcmV0
dXJuIFNoYXJlZFdvcmtlckV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5oCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydC5nZXQoKTsg
fQogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGV4cGxpY2l0IFNoYXJlZFdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRX
b3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDkgKzcwLDkgQEAgU2hh
cmVkV29ya2VyR2xvYmFsU2NvcGU6On5TaGFyZWRXb3JrZXJHbAogewogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QK
K0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjpldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTsKKyAgICByZXR1cm4gU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNoYXJlZFdvcmtlclRocmVhZCog
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnRocmVhZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyBFdmVudFRhcmdldAotICAgICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAgICAgLy8gU2V0dGVycy9HZXR0ZXJzIGZvciBhdHRy
aWJ1dGVzIGluIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAogICAgICAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbm5lY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOSArMTA4LDkgQEAgV29ya2VyOjp+V29ya2Vy
KCkKICAgICBtX2NvbnRleHRQcm94eS0+d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CiB9CiAKLWNv
bnN0IEF0b21pY1N0cmluZyYgV29ya2VyOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFy
Z2V0SW50ZXJmYWNlIFdvcmtlcjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV29ya2VyOworICAgIHJldHVybiBXb3Jr
ZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIHZvaWQgV29ya2VyOjpwb3N0TWVzc2Fn
ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQq
IHBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZpcnR1YWwgfldv
cmtlcigpOwogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAgICAgICB2b2lk
IHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBj
b25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICAvLyBOZWVk
ZWQgZm9yIE9iamVjdGl2ZS1DIGJpbmRpbmdzIChzZWUgYnVnIDI4Nzc0KS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNSw5
ICsxMzA1LDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAg
QWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgWE1MSHR0cFJlcXVlc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgWE1MSHR0cFJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclhNTEh0dHBSZXF1ZXN0OworICAg
IHJldHVybiBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogWE1MSHR0cFJlcXVlc3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkVGlt
ZW91dCgpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIGNvbnN0IEtVUkwmIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBw
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGxvYWRlZCgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRvdGFsKCk7IH0KIAotICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvclhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDsgfQorICAgIHZp
cnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRJbnRlcmZhY2VUeXBlOyB9CiAKIHByaXZhdGU6CiAgICAg
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDkgKzQxLDkgQEAgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OlhNTEh0dHBSZXF1ZXN0VXBsbwog
ewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFhNTEh0dHBSZXF1ZXN0VXBsb2Fk
OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JYTUxIdHRwUmVxdWVzdFVwbG9hZDsKKyAgICByZXR1cm4gWE1MSHR0cFJl
cXVlc3RVcGxvYWRFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxv
YWQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZGVyZWYoKSB7IG1feG1sSHR0cFJlcXVlc3QtPmRlcmVmKCk7IH0KICAg
ICAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV94
bWxIdHRwUmVxdWVzdDsgfQogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212286</attachid>
            <date>2013-09-21 15:14:22 -0700</date>
            <delta_ts>2013-09-21 21:11:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121751-20130921151420.patch</filename>
            <type>text/plain</type>
            <size>133452</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRXZlbnQgYW5kIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZXMgZG9uJ3QgbmVlZCB0byBiZSBzdG9yZSBhcyBBdG9taWNTdHJpbmdzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb252ZXJ0IHRoZSBFdmVu
dCBhbmQgRXZlbnRUYXJnZXQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIGZyb20gQXRvbWljU3RyaW5n
cyB0byBlbnVtcy4gVGhleQorICAgICAgICBhcmUgbm90IGV4dGVuc2libGUgYW5kIG5vdCBleHBv
c2VkIGFzIFN0cmluZ3MgYW55d2hlcmUuCisKKyAgICAgICAgKiBGaWxlcyBlbGlkZWQgKgorCiAy
MDEzLTA5LTIxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBO
b2RlOiBGSU5BTC1pemUgRXZlbnRUYXJnZXQgb3ZlcnJpZGVzLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gY3JlYXRlKE5hdmlnYXRvciopOwogCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBjb25zdCBXVEY6OkF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JCYXR0ZXJ5TWFuYWdlcjsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBCYXR0ZXJ5TWFuYWdlckV2ZW50VGFy
Z2V0SW50ZXJmYWNlVHlwZTsgfQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKICAgICBib29sIGNoYXJnaW5nKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL01lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDkgQEAgTWVkaWFLZXlNZXNzYWdlRXZlbnQ6On5N
ZWRpYUtleU1lc3NhZ2VFdgogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5TWVz
c2FnZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhS2V5
TWVzc2FnZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRpYUtleU1lc3NhZ2VFdmVudDsKKyAgICByZXR1cm4gTWVk
aWFLZXlNZXNzYWdlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
TWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleU1lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TWVzc2FnZUV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lZGlhS2V5TWVzc2FnZUV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7
CiAgICAgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICBVaW50OEFycmF5KiBtZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXNzYWdlLmdldCgpOyB9CiAgICAgU3RyaW5nIGRlc3RpbmF0aW9uVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblVSTDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVk
RXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw5IEBAIE1lZGlhS2V5TmVlZGVkRXZlbnQ6On5NZWRpYUtleU5lZWRlZEV2ZW4KIHsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUtleU5lZWRlZEV2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmV2ZW50SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1l
ZGlhS2V5TmVlZGVkRXZlbnQ7CisgICAgcmV0dXJuIE1lZGlhS2V5TmVlZGVkRXZlbnRJbnRlcmZh
Y2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVkRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5TmVlZGVk
RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleU5lZWRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhS2V5TmVl
ZGVkRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogICAg
IFVpbnQ4QXJyYXkqIGluaXREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbml0RGF0YS5nZXQoKTsg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
U2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6YWRkS2V5
VGltZXJGaXJlZChUCiAgICAgfQogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhS2V5U2Vz
c2lvbjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBNZWRpYUtl
eVNlc3Npb246OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhS2V5U2Vzc2lvbjsKKyAgICByZXR1cm4gTWVkaWFL
ZXlTZXNzaW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBNZWRpYUtleVNlc3Npb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHdlYmtpdGtleWVycm9yKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHdlYmtpdGtleW1lc3NhZ2UpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qg
T1ZFUlJJREU7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOSArNzUsOSBAQCBGaWxlV3JpdGVyOjp+RmlsZVdyaXRlcigpCiAgICAgICAgIHN0
b3AoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBGaWxlV3JpdGVyOjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIEZpbGVXcml0ZXI6OmV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckZp
bGVXcml0ZXI7CisgICAgcmV0dXJuIEZpbGVXcml0ZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
CiB9CiAKIGJvb2wgRmlsZVdyaXRlcjo6Y2FuU3VzcGVuZCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmgJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmFp
bChGaWxlRXJyb3I6OkVycm9yQ29kZSk7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OyB9CiAKICAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjo6cmVmOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsOSArMzYyLDkgQEAgdm9pZCBJREJE
YXRhYmFzZTo6c3RvcCgpCiAgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQkRhdGFiYXNlOworICAg
IHJldHVybiBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogSURCRGF0YWJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7
CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Ns
b3NlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAg
SURCT3BlbkRCUmVxdWVzdDo6fklEQk9wZW5EQlJlcXVlc3QoKQogewogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIElEQk9wZW5EQlJlcXVlc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgSURCT3BlbkRCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCT3BlbkRCUmVx
dWVzdDsKKyAgICByZXR1cm4gSURCT3BlbkRCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKIH0KIAogdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQoaW50NjRfdCBvbGRWZXJz
aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYp
IE9WRVJSSURFOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgT1ZFUlJJREU7CiAKICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsb2NrZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE1NjIzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzQsOSArNDM0LDkgQEAgdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKICAg
ICAgICAgbWFya0Vhcmx5RGVhdGgoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBJREJSZXF1
ZXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVl
c3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvcklEQlJlcXVlc3Q7CisgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRh
cmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlJlcXVl
c3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5k
bGVyKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY4LDkgKzM2OCw5IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGUK
ICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
VGFyZ2V0SW50ZXJmYWNlIElEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJUcmFuc2FjdGlv
bjsKKyAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9
CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgp
OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHVzaW5nIEV2
ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIElEQlZl
cnNpb25DaGFuZ2VFdmVudDo6fklEQlZlcnNpb25DaGFuZ2UKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdl
RXZlbnQ7CisgICAgcmV0dXJuIElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkFueT4gb2xkVmVyc2lvbigpIHsgcmV0dXJuIG1fb2xk
VmVyc2lvbjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+IG5ld1ZlcnNpb24oKSB7
IHJldHVybiBtX25ld1ZlcnNpb247IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIElEQlZlcnNpb25DaGFuZ2VFdmVu
dChQYXNzUmVmUHRyPElEQkFueT4gb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJBbnk+IG5ld1Zl
cnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kaWV1aS9VSVJlcXVlc3RFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmNwcAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOSArNzQsOSBAQCBVSVJlcXVlc3RFdmVudDo6flVJ
UmVxdWVzdEV2ZW50KCkKIHsKIH0KICAgICAKLWNvbnN0IEF0b21pY1N0cmluZyYgVUlSZXF1ZXN0
RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgVUlSZXF1ZXN0RXZl
bnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclVJUmVxdWVzdEV2ZW50OworICAgIHJldHVybiBVSVJlcXVlc3RFdmVudEludGVy
ZmFjZVR5cGU7CiB9CiAKIFVJUmVxdWVzdEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6VUlSZXF1ZXN0
RXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+IGV2ZW50KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpL1VJUmVxdWVzdEV2ZW50
LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kaWV1aS9V
SVJlcXVlc3RFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHByb3RlY3Rl
ZDoKICAgICAKICAgICBVSVJlcXVlc3RFdmVudCgpOwogICAgIAotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIEV2ZW50SW50ZXJmYWNl
IGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxFdmVudFRhcmdldD4gbV9yZWNlaXZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA3LDkgKzIwNyw5IEBAIGJvb2wgTWVkaWFTb3VyY2U6OmlzVHlw
ZVN1cHBvcnRlZChjb25zdCAKICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRNZWRpYVNvdXJjZU1JTUVUeXBlKGNvbnRlbnRUeXBlLnR5cGUoKSwgY29kZWNzKTsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitF
dmVudFRhcmdldEludGVyZmFjZSBNZWRpYVNvdXJjZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFTb3VyY2U7
CisgICAgcmV0dXJuIE1lZGlhU291cmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVHlwZVN1cHBvcnRl
ZChjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNl
QmFzZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVm
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsOSAr
MjE0LDkgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU291cmNlQnVmZmVyOjpzYwogICAgIHJl
dHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBTb3VyY2VCdWZmZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRUYXJnZXRJbnRlcmZhY2UgU291cmNlQnVmZmVyOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTb3VyY2VCdWZmZXI7
CisgICAgcmV0dXJuIFNvdXJjZUJ1ZmZlckV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAog
RXZlbnRUYXJnZXREYXRhKiBTb3VyY2VCdWZmZXI6OmV2ZW50VGFyZ2V0RGF0YSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
CiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlcj46
OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlcj46OmRlcmVmOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw5
ICs3OCw5IEBAIHZvaWQgU291cmNlQnVmZmVyTGlzdDo6c2NoZWR1bGVFdmVudChjb24KICAgICBt
X2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBTb3VyY2VCdWZmZXJMaXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QK
K0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNvdXJjZUJ1ZmZlckxpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNvdXJj
ZUJ1ZmZlckxpc3Q7CisgICAgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFNvdXJjZUJ1ZmZlckxpc3Q6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyKCk7CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
U291cmNlQnVmZmVyTGlzdD46OnJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvV2ViS2l0TWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAx
NTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlh
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIGJvb2wgV2ViS2l0
TWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZCgKICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRNZWRpYVNvdXJjZU1JTUVUeXBlKGNvbnRlbnRUeXBlLnR5cGUoKSwgY29k
ZWNzKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJLaXRNZWRpYVNvdXJjZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBXZWJLaXRNZWRpYVNvdXJjZTo6
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yV2ViS2l0TWVkaWFTb3VyY2U7CisgICAgcmV0dXJuIFdlYktpdE1lZGlhU291
cmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlhU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9X
ZWJLaXRNZWRpYVNvdXJjZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1dlYktpdE1lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVHlwZVN1cHBvcnRlZChj
b25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFz
ZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVmOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZm
ZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1dlYktpdFNvdXJjZUJ1ZmZlckxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw5ICs5Myw5IEBAIHZvaWQgV2ViS2l0U291cmNlQnVmZmVy
TGlzdDo6Y3JlYXRlQW5kRmkKICAgICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZl
bnQucmVsZWFzZSgpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJLaXRTb3VyY2VCdWZm
ZXJMaXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFdlYktp
dFNvdXJjZUJ1ZmZlckxpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktpdFNvdXJjZUJ1ZmZlckxpc3Q7Cisg
ICAgcmV0dXJuIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdlYktpdFNvdXJjZUJ1ZmZlckxpc3Q6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9XZWJLaXRTb3VyY2VCdWZmZXJMaXN0LmgJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
V2ViS2l0U291cmNlQnVmZmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZh
Y2UKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJ
bnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V2ViS2l0U291cmNlQnVmZmVyTGlzdD46OnJlZjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDkgKzI1Nyw5IEBAIHZvaWQgTWVk
aWFTdHJlYW06OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fc3RvcHBlZCA9IHRydWU7CiB9CiAK
LWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW06OmludGVyZmFjZU5hbWUoKSBjb25zdAor
RXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFTdHJlYW06OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhU3RyZWFt
OworICAgIHJldHVybiBNZWRpYVN0cmVhbUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAog
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3
Miw3IEBAIHB1YmxpYzoKICAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKSBj
b25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3IuZ2V0KCk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2lu
ZyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuY3BwCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIE1lZGlhU3Ry
ZWFtKiBNZWRpYVN0cmVhbUV2ZW50OjpzdHJlYW0oKSAKICAgICByZXR1cm4gbV9zdHJlYW0uZ2V0
KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1FdmVudDo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNZWRpYVN0cmVhbUV2ZW50OjpldmVudEludGVy
ZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZWRp
YVN0cmVhbUV2ZW50OworICAgIHJldHVybiBNZWRpYVN0cmVhbUV2ZW50SW50ZXJmYWNlVHlwZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUV2ZW50LmgJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1F
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIE1l
ZGlhU3RyZWFtKiBzdHJlYW0oKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtRXZlbnQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVRyYWNrLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc0LDkgKzE3NCw5IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c3RvcCgpCiAgICAg
bV9zdG9wcGVkID0gdHJ1ZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRy
YWNrOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIE1lZGlhU3Ry
ZWFtVHJhY2s6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZl
bnROYW1lcygpLmludGVyZmFjZUZvck1lZGlhU3RyZWFtVHJhY2s7CisgICAgcmV0dXJuIE1lZGlh
U3RyZWFtVHJhY2tFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIE1lZGlhU3RyZWFtVHJhY2s6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRy
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGVuZGVkKCkgY29uc3Q7CiAKICAgICAvLyBF
dmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwog
CiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrRXZlbnQuY3BwCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAg
TWVkaWFTdHJlYW1UcmFjayogTWVkaWFTdHJlYW1UcmFja0V2ZW50OgogICAgIHJldHVybiBtX3Ry
YWNrLmdldCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tFdmVu
dDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNZWRpYVN0cmVhbVRyYWNr
RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygp
LmludGVyZmFjZUZvck1lZGlhU3RyZWFtVHJhY2tFdmVudDsKKyAgICByZXR1cm4gTWVkaWFTdHJl
YW1UcmFja0V2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2tFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBNZWRpYVN0cmVhbVRyYWNrKiB0
cmFjaygpIGNvbnN0OwogCiAgICAgLy8gRXZlbnQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRJ
bnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAg
ICBNZWRpYVN0cmVhbVRyYWNrRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6
ZGlkUGxheVRvbmUoY29uc3QgU3QKICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUlRDRFRNRlRv
bmVDaGFuZ2VFdmVudDo6Y3JlYXRlKHRvbmUpKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBS
VENEVE1GU2VuZGVyOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IFJUQ0RUTUZTZW5kZXI6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0RUTUZTZW5kZXI7CisgICAgcmV0dXJuIFJU
Q0RUTUZTZW5kZXJFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIFJUQ0RUTUZTZW5kZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1G
U2VuZGVyLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDRFRNRlNlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRvbmVjaGFuZ2Up
OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dCBPVkVSUklERTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GVG9uZUNoYW5nZUV2ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hh
bmdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw5ICs3Myw5IEBAIGNvbnN0IFN0cmluZyYgUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDo6dG8K
ICAgICByZXR1cm4gbV90b25lOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RUTUZUb25l
Q2hhbmdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUlRDRFRN
RlRvbmVDaGFuZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDsKKyAgICByZXR1
cm4gUlRDRFRNRlRvbmVDaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RFRNRlRvbmVDaGFuZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlRvbmVDaGFuZ2VFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZUb25lQ2hhbmdl
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBTdHJpbmcmIHRvbmUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJUQ0RUTUZUb25lQ2hhbmdl
RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg1LDkgKzI4NSw5IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZERldGVjdEVycm9y
KCkKICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRD
RGF0YUNoYW5uZWw6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
UlRDRGF0YUNoYW5uZWw6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0RhdGFDaGFubmVsOworICAgIHJldHVybiBS
VENEYXRhQ2hhbm5lbEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogUlRDRGF0YUNoYW5uZWw6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3AoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB1c2luZyBS
ZWZDb3VudGVkPFJUQ0RhdGFDaGFubmVsPjo6cmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuY3Bw
CShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBA
IFJUQ0RhdGFDaGFubmVsKiBSVENEYXRhQ2hhbm5lbEV2ZW50OjpjaGEKICAgICByZXR1cm4gbV9j
aGFubmVsLmdldCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsRXZl
bnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgUlRDRGF0YUNoYW5uZWxF
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yUlRDRGF0YUNoYW5uZWxFdmVudDsKKyAgICByZXR1cm4gUlRDRGF0YUNoYW5u
ZWxFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWxFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWxFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICBSVENEYXRhQ2hhbm5lbCogY2hhbm5lbCgpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgUlRDRGF0YUNoYW5uZWxFdmVudCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGVFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw5ICs2Miw5IEBAIFJUQ0ljZUNhbmRpZGF0ZSogUlRDSWNlQ2FuZGlkYXRlRXZlbnQ6OmMKICAg
ICByZXR1cm4gbV9jYW5kaWRhdGUuZ2V0KCk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRD
SWNlQ2FuZGlkYXRlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2Ug
UlRDSWNlQ2FuZGlkYXRlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0ljZUNhbmRpZGF0ZUV2ZW50OworICAgIHJl
dHVybiBSVENJY2VDYW5kaWRhdGVFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICBSVENJY2VD
YW5kaWRhdGUqIGNhbmRpZGF0ZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNl
IGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRl
RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTg1LDkgKzU4NSw5IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRp
ZEFkZFJlbW90ZURhdGEKICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUlRDRGF0YUNoYW5uZWxF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kYXRhY2hhbm5lbEV2ZW50LCBmYWxzZSwgZmFsc2Us
IGNoYW5uZWwucmVsZWFzZSgpKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUlRDUGVlckNv
bm5lY3Rpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgUlRD
UGVlckNvbm5lY3Rpb246OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ1BlZXJDb25uZWN0aW9uOworICAgIHJldHVy
biBSVENQZWVyQ29ubmVjdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogUlRDUGVlckNvbm5lY3Rpb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRB
ZGRSZW1vdGVEYXRhQ2hhbm5lbChQYXNzT3duUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4pIE9W
RVJSSURFOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0lu
Zm9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9uZXR3b3JraW5mby9OZXR3b3JrSW5mb0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Miw5ICs4Miw5IEBAIEV2ZW50VGFyZ2V0RGF0YSYgTmV0d29ya0luZm9Db25uZWN0aW9u
OjoKICAgICByZXR1cm4gbV9ldmVudFRhcmdldERhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgTmV0d29ya0luZm9Db25uZWN0aW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFy
Z2V0SW50ZXJmYWNlIE5ldHdvcmtJbmZvQ29ubmVjdGlvbjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTmV0d29ya0lu
Zm9Db25uZWN0aW9uOworICAgIHJldHVybiBOZXR3b3JrSW5mb0Nvbm5lY3Rpb25FdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7CiB9CiAKIHZvaWQgTmV0d29ya0luZm9Db25uZWN0aW9uOjpzdXNwZW5k
KFJlYXNvbkZvclN1c3BlbnNpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25ldHdv
cmtpbmZvL05ldHdvcmtJbmZvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0luZm9Db25uZWN0aW9uLmgJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmV0d29ya2luZm8vTmV0d29ya0lu
Zm9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgbmV0d29ya0luZm9Db250cm9sbGVyRGVzdHJveWVkKCkgeyBtX2NvbnRyb2xsZXIg
PSAwOyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsg
fQogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxOZXR3b3JrSW5mb0Nvbm5lY3Rpb24+OjpyZWY7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5
ICsxMzAsOSBAQCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4gTm90aWZpY2F0aW9uOjpjCiB9CiAj
ZW5kaWYKIAotY29uc3QgQXRvbWljU3RyaW5nJiBOb3RpZmljYXRpb246OmludGVyZmFjZU5hbWUo
KSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTm90aWZpY2F0aW9uOjpldmVudFRhcmdldElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JO
b3RpZmljYXRpb247CisgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNl
VHlwZTsKIH0KIAogdm9pZCBOb3RpZmljYXRpb246OnNob3coKSAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3Rp
ZmljYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBSZWZDb3VudGVkPE5vdGlmaWNhdGlvbj46OmRlcmVmOwogCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHZvaWQgc3RvcExvYWRpbmdJY29u
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1p
dHlFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5
L0RldmljZVByb3hpbWl0eUV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUV2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBtaW4oKSB7IHJldHVybiBt
X21pbjsgfQogICAgIGRvdWJsZSBtYXgoKSB7IHJldHVybiBtX21heDsgfQogCi0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yRGV2aWNlUHJveGltaXR5RXZlbnQ7IH0KKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gRGV2aWNlUHJv
eGltaXR5RXZlbnRJbnRlcmZhY2VUeXBlOyB9CiAKIHByaXZhdGU6CiAgICAgRGV2aWNlUHJveGlt
aXR5RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZCgpCiAgICAg
dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU3Bl
ZWNoUmVjb2duaXRpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgU3BlZWNoUmVjb2duaXRpb246OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNwZWVjaFJlY29nbml0aW9uOworICAg
IHJldHVybiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAog
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU3BlZWNoUmVjb2duaXRpb246OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEVuZCgpOwogCiAgICAgLy8gRXZl
bnRUYXJnZXQuCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICAvLyBBY3RpdmVET01PYmplY3QuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmNwcAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDkgKzg3LDkgQEAgU3BlZWNoUmVjb2du
aXRpb25FcnJvcjo6U3BlZWNoUmVjb2duaXRpbwogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IFNwZWVjaFJlY29nbml0aW9uRXJyb3I6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRl
cmZhY2UgU3BlZWNoUmVjb2duaXRpb25FcnJvcjo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU3BlZWNoUmVjb2duaXRpb25FcnJv
cjsKKyAgICByZXR1cm4gU3BlZWNoUmVjb2duaXRpb25FcnJvckludGVyZmFjZVR5cGU7CiB9CiAK
IFNwZWVjaFJlY29nbml0aW9uRXJyb3JJbml0OjpTcGVlY2hSZWNvZ25pdGlvbkVycm9ySW5pdCgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNo
UmVjb2duaXRpb25FcnJvci5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgZXJyb3IoKSB7IHJldHVy
biBtX2Vycm9yOyB9CiAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgeyByZXR1cm4gbV9tZXNz
YWdlOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FdmVudC5jcHAJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFJlY29nbml0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIFBh
c3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25FdmVudD4gU3BlZWMKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNwZWVjaFJlY29nbml0aW9uRXZlbnQoZXZlbnROYW1lcygpLm5vbWF0Y2hFdmVudCwg
MCwgMCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb25F
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU3BlZWNoUmVjb2duaXRpb25FdmVudDsKKyAgICByZXR1cm4gU3BlZWNoUmVj
b2duaXRpb25FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6
OlNwZWVjaFJlY29nbml0aW9uRXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoUmVjb2duaXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uRXZlbnQuaAkocmV2aXNpb24gMTU2
MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25F
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBEb2N1
bWVudCogZW1tYSgpIHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIEV2ZW50Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAK
IHByaXZhdGU6CiAgICAgU3BlZWNoUmVjb2duaXRpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVudC5oCShy
ZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hT
eW50aGVzaXNFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoK
ICAgICBmbG9hdCBlbGFwc2VkVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxhcHNlZFRpbWU7IH0K
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTcGVlY2hTeW50aGVzaXNFdmVudDsgfQor
ICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVy
biBTcGVlY2hTeW50aGVzaXNFdmVudEludGVyZmFjZVR5cGU7IH0KICAgICAKIHByaXZhdGU6CiAg
ICAgU3BlZWNoU3ludGhlc2lzRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBTcGVlY2hTeW50aGVzaXNVCiAgICAgcmV0dXJuIENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9ICAgIAogICAg
IAotY29uc3QgQXRvbWljU3RyaW5nJiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7CisgICAgcmV0dXJuIFNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU3Bl
ZWNoU3ludGhlc2lzVm9pY2UqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9pY2UoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBF
dmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSB7IHJlZigpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSB7IGRlcmVmKCk7
IH0KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJ
REUgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1MCw5ICs5NTAsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6cHJvY2Vz
c0F1dG9tYXRpY1B1bGxOCiAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ld
LT5wcm9jZXNzSWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBBdWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgQXVkaW9Db250ZXh0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb0NvbnRleHQ7CisgICAgcmV0
dXJuIEF1ZGlvQ29udGV4dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogQXVkaW9Db250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRpb1N1bW1pbmdKdW5j
dGlvbiopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRl
cmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEmIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpIHsgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4MCw5ICsyODAsOSBAQCB2b2lkIEF1ZGlvTm9kZTo6dXBkYXRlQ2hhbm5l
bHNGb3JJbnB1dHMoCiAgICAgICAgIGlucHV0KGkpLT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dFRhcmdldEludGVyZmFjZSBBdWRpb05vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvTm9kZTsKKyAgICBy
ZXR1cm4gQXVkaW9Ob2RlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgogICAgIEF1ZGlv
QnVzOjpDaGFubmVsSW50ZXJwcmV0YXRpb24gaW50ZXJuYWxDaGFubmVsSW50ZXJwcmV0YXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxJbnRlcnByZXRhdGlvbjsgfQogCiAgICAgLy8gRXZl
bnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEm
IGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fZXZlbnRUYXJnZXRE
YXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6On5BdWRpb1By
b2Nlc3NpbmdFdgogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvUHJvY2Vzc2luZ0V2
ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEF1ZGlvUHJvY2Vzc2lu
Z0V2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JBdWRpb1Byb2Nlc3NpbmdFdmVudDsKKyAgICByZXR1cm4gQXVkaW9Qcm9j
ZXNzaW5nRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlcigpIHsgcmV0
dXJuIG1faW5wdXRCdWZmZXIuZ2V0KCk7IH0KICAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVy
KCkgeyByZXR1cm4gbV9vdXRwdXRCdWZmZXIuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudElu
dGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEF1ZGlvUHJv
Y2Vzc2luZ0V2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCShyZXZp
c2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAg
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZAogewogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmV2ZW50
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ck9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDsKKyAgICByZXR1cm4gT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIEF1ZGlvQnVm
ZmVyKiByZW5kZXJlZEJ1ZmZlcigpIHsgcmV0dXJuIG1fcmVuZGVyZWRCdWZmZXIuZ2V0KCk7IH0K
IAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7
CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5oCShyZXZpc2lvbiAx
NTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVh
c29uKCkgY29uc3QgeyByZXR1cm4gbV9yZWFzb247IH0KIAogICAgIC8vIEV2ZW50IGZ1bmN0aW9u
LgotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckNsb3NlRXZlbnQ7IH0K
KyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gQ2xvc2VFdmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBD
bG9zZUV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDkgKzQ0
OCw5IEBAIHZvaWQgV2ViU29ja2V0OjpzZXRCaW5hcnlUeXBlKGNvbnN0IFN0cmkKICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsICInIiArIGJpbmFyeVR5cGUgKyAiJyBpcyBub3QgYSB2YWxpZCB2
YWx1ZSBmb3IgYmluYXJ5VHlwZTsgYmluYXJ5VHlwZSByZW1haW5zIHVuY2hhbmdlZC4iKTsKIH0K
IAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJTb2NrZXQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAor
RXZlbnRUYXJnZXRJbnRlcmZhY2UgV2ViU29ja2V0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJTb2NrZXQ7Cisg
ICAgcmV0dXJuIFdlYlNvY2tldEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogV2ViU29ja2V0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjbG9zZSk7CiAKICAgICAvLyBFdmVu
dFRhcmdldCBmdW5jdGlvbnMuCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVy
ZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZF
UlJJREU7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OnJlZjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsOCBAQCBKU0Vycm9ySGFuZGxlcjo6fkpTRXJy
b3JIYW5kbGVyKCkKIAogdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQqIGV2ZW50KQogewot
ICAgIGlmICghZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJy
b3JFdmVudCkpCisKKyAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVu
dEludGVyZmFjZVR5cGUpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiB9CiAKICNkZWZpbmUg
VFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXAotICAgIGlmIChldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yIyNpbnRlcmZhY2VOYW1lID09IGRlc2lyZWRJbnRlcmZhY2Up
IFwKKyAgICBjYXNlIGludGVyZmFjZU5hbWUjI0ludGVyZmFjZVR5cGU6IFwKICAgICAgICAgcmV0
dXJuIENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIGludGVyZmFjZU5hbWUs
IGV2ZW50KTsKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRXZlbnQqIGV2ZW50KQpAQCAtNjMsOCArNjMsOSBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKHdyYXBwZXIpCiAgICAg
ICAgIHJldHVybiB3cmFwcGVyOwogCi0gICAgU3RyaW5nIGRlc2lyZWRJbnRlcmZhY2UgPSBldmVu
dC0+aW50ZXJmYWNlTmFtZSgpOwotICAgIERPTV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKFRS
WV9UT19XUkFQX1dJVEhfSU5URVJGQUNFKQorICAgIHN3aXRjaCAoZXZlbnQtPmV2ZW50SW50ZXJm
YWNlKCkpIHsKKyAgICAgICAgRE9NX0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goVFJZX1RPX1dS
QVBfV0lUSF9JTlRFUkZBQ0UpCisgICAgfQogCiAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBF
UihleGVjLCBnbG9iYWxPYmplY3QsIEV2ZW50LCBldmVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBUUllfVE9fV1JBUF9XSVRIX0lO
VEVSRkFDRShpbnRlcmZhY2VOYW1lKSBcCi0gICAgaWYgKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3IjI2ludGVyZmFjZU5hbWUgPT0gZGVzaXJlZEludGVyZmFjZSkgXAorICAgIGNhc2UgaW50ZXJm
YWNlTmFtZSMjRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOiBcCiAgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50ZXJmYWNlTmFtZSo+KHRhcmdldCkp
OwogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFdmVudFRhcmdldCogdGFyZ2V0KQpAQCAtNDQsMTkgKzQ0LDkgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghdGFyZ2V0KQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBBdG9taWNTdHJpbmcgZGVzaXJlZEludGVyZmFj
ZSA9IHRhcmdldC0+aW50ZXJmYWNlTmFtZSgpOwotCi0gICAgLy8gRklYTUU6IFdoeSBjYW4ndCB3
ZSB1c2UgdG9KUyBmb3IgdGhlc2UgY2FzZXM/Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgaWYg
KGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9PSBk
ZXNpcmVkSW50ZXJmYWNlKQotICAgICAgICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChzdGF0
aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSo+KHRhcmdldCksIGV4ZWMpOwotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIGlmIChldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPT0gZGVzaXJlZEludGVyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmplY3Qoc3RhdGljX2Nhc3Q8U2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUqPih0YXJnZXQpLCBleGVjKTsKLSNlbmRpZgotCisgICAgc3dpdGNoICh0YXJn
ZXQtPmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkpIHsKICAgICBET01fRVZFTlRfVEFSR0VUX0lOVEVS
RkFDRVNfRk9SX0VBQ0goVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UpCisgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01FdmVudHMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01FdmVudHMubW0JKHJldmlzaW9uIDE1NjIzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NRXZlbnRzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwyMSArNDksMjUgQEAgQ2xhc3Mga2l0Q2xhc3MoV2ViQ29yZTo6RXZlbnQqIGltcGwp
CiAgICAgICAgICAgICByZXR1cm4gW0RPTUtleWJvYXJkRXZlbnQgY2xhc3NdOwogICAgICAgICBp
ZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gW0RPTU1vdXNlRXZl
bnQgY2xhc3NdOwotICAgICAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JUZXh0RXZlbnQpKQorCisgICAgICAgIFdlYkNvcmU6OkV2ZW50SW50ZXJmYWNl
IGRlc2lyZWRJbnRlcmZhY2UgPSBpbXBsLT5ldmVudEludGVyZmFjZSgpOworICAgICAgICBpZiAo
ZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpUZXh0RXZlbnRJbnRlcmZhY2VUeXBlKQogICAg
ICAgICAgICAgcmV0dXJuIFtET01UZXh0RXZlbnQgY2xhc3NdOwotICAgICAgICBpZiAoaW1wbC0+
aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBbRE9NV2hlZWxFdmVudCBjbGFzc107ICAgICAgICAKKyAgICAgICAgaWYg
KGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6V2hlZWxFdmVudEludGVyZmFjZVR5cGUpCisg
ICAgICAgICAgICByZXR1cm4gW0RPTVdoZWVsRXZlbnQgY2xhc3NdOwogICAgICAgICByZXR1cm4g
W0RPTVVJRXZlbnQgY2xhc3NdOwogICAgIH0KLSAgICBpZiAoaW1wbC0+aGFzSW50ZXJmYWNlKGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNdXRhdGlvbkV2ZW50KSkKKworICAgIFdlYkNvcmU6OkV2
ZW50SW50ZXJmYWNlIGRlc2lyZWRJbnRlcmZhY2UgPSBpbXBsLT5ldmVudEludGVyZmFjZSgpOwor
ICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6Ok11dGF0aW9uRXZlbnRJbnRlcmZh
Y2VUeXBlKQogICAgICAgICByZXR1cm4gW0RPTU11dGF0aW9uRXZlbnQgY2xhc3NdOwotICAgIGlm
IChpbXBsLT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvck92ZXJmbG93RXZl
bnQpKQorICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09IFdlYkNvcmU6Ok92ZXJmbG93RXZlbnRJ
bnRlcmZhY2VUeXBlKQogICAgICAgICByZXR1cm4gW0RPTU92ZXJmbG93RXZlbnQgY2xhc3NdOwot
ICAgIGlmIChpbXBsLT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lc3Nh
Z2VFdmVudCkpCisgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gV2ViQ29yZTo6TWVzc2FnZUV2
ZW50SW50ZXJmYWNlVHlwZSkKICAgICAgICAgcmV0dXJuIFtET01NZXNzYWdlRXZlbnQgY2xhc3Nd
OwotICAgIGlmIChpbXBsLT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvclBy
b2dyZXNzRXZlbnQpIHx8IGltcGwtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFj
ZSA9PSBXZWJDb3JlOjpQcm9ncmVzc0V2ZW50SW50ZXJmYWNlVHlwZSB8fCBkZXNpcmVkSW50ZXJm
YWNlID09IFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudEludGVyZmFjZVR5cGUp
CiAgICAgICAgIHJldHVybiBbRE9NUHJvZ3Jlc3NFdmVudCBjbGFzc107Ci0gICAgaWYgKGltcGwt
Pmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3JlTG9hZEV2ZW50KSkK
KyAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBXZWJDb3JlOjpCZWZvcmVMb2FkRXZlbnRJbnRl
cmZhY2VUeXBlKQogICAgICAgICByZXR1cm4gW0RPTUJlZm9yZUxvYWRFdmVudCBjbGFzc107CiAg
ICAgcmV0dXJuIFtET01FdmVudCBjbGFzc107CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2VMb2FkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZUxvYWRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZUxvYWRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDkgKzU3LDkgQEAgQ1NTRm9udEZhY2VMb2FkRXZlbnQ6On5DU1NGb250RmFjZUxvYWRFdgogewog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIENTU0ZvbnRGYWNlTG9hZEV2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIENTU0ZvbnRGYWNlTG9hZEV2ZW50OjpldmVudElu
dGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JD
U1NGb250RmFjZUxvYWRFdmVudDsKKyAgICByZXR1cm4gQ1NTRm9udEZhY2VMb2FkRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VMb2FkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VMb2FkRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIENTU0ZvbnRGYWNlUnVsZSogZm9udGZhY2UoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnRmYWNlLmdldCgpOyB9CiAgICAgRE9NRXJyb3IqIGVycm9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lcnJvci5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJm
YWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NTRm9udEZhY2VM
b2FkRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDkgKzEyNCw5IEBAIEV2ZW50VGFyZ2V0RGF0YSYgRm9udExvYWRlcjo6ZW5zdXJl
RXZlbnQKICAgICByZXR1cm4gbV9ldmVudFRhcmdldERhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgRm9udExvYWRlcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVy
ZmFjZSBGb250TG9hZGVyOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JGb250TG9hZGVyOworICAgIHJldHVybiBGb250
TG9hZGVyRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBGb250TG9hZGVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRMb2FkZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBsb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nQ291bnQgPiAwOyB9
CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNl
TmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8Rm9udExvYWRlcj46
OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPEZvbnRMb2FkZXI+OjpkZXJlZjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVMb2FkRXZl
bnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Qg
eyByZXR1cm4gQmVmb3JlTG9hZEV2ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAg
IEJlZm9yZUxvYWRFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEw
ICszOSwxMCBAQCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6fkJlZm9yZVRleHRJbnNlCiB7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmV2
ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKICAgICAvLyBOb3RpY2UgdGhhdCB0aGVyZSBpcyBubyBC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5pZGwuCi0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JFdmVudDsKKyAgICByZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQpKTsKICAgICB9
CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgJKHJldmlzaW9u
IDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmV0dXJuVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3JldHVyblZhbHVlOyB9CiAgICAgdm9pZCBzZXRSZXR1cm5W
YWx1ZShjb25zdCBTdHJpbmcmIHJldHVyblZhbHVlKSB7IG1fcmV0dXJuVmFsdWUgPSByZXR1cm5W
YWx1ZTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3Jl
VW5sb2FkRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQmVmb3JlVW5sb2FkRXZlbnRJbnRlcmZhY2VUeXBl
OyB9CiAKIHByaXZhdGU6CiAgICAgQmVmb3JlVW5sb2FkRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQx
LDEwIEBAIENsaXBib2FyZEV2ZW50Ojp+Q2xpcGJvYXJkRXZlbnQoKQogewogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIENsaXBib2FyZEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50
SW50ZXJmYWNlIENsaXBib2FyZEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7CiAgICAg
Ly8gTm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gQ2xpcGJvYXJkRXZlbnQuaWRsLgotICAgIHJldHVy
biBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQ7CisgICAgcmV0dXJuIEV2ZW50SW50ZXJm
YWNlVHlwZTsKIH0KIAogYm9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDbGlwYm9hcmRF
dmVudCgpOwogICAgICAgICBDbGlwYm9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPik7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlw
Ym9hcmRFdmVudCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+
IG1fY2xpcGJvYXJkOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmNw
cAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5IEBAIHZvaWQgQ29tcG9zaXRpb25F
dmVudDo6aW5pdENvbXBvc2l0aW9uRXYKICAgICBtX2RhdGEgPSBkYXRhOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIENvbXBvc2l0aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgQ29tcG9zaXRpb25FdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQ29tcG9zaXRpb25FdmVudDsKKyAg
ICByZXR1cm4gQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNl
IGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRpb25FdmVu
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw5ICs1OSw5IEBAIHZvaWQgQ3VzdG9tRXZlbnQ6OmluaXRDdXN0b21FdmVudChjb25zdCAK
ICAgICBtX2RldGFpbCA9IGRldGFpbDsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBDdXN0b21F
dmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBDdXN0b21FdmVudDo6
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yQ3VzdG9tRXZlbnQ7CisgICAgcmV0dXJuIEN1c3RvbUV2ZW50SW50ZXJmYWNlVHlwZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50
LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5p
dEN1c3RvbUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJv
b2wgY2FuY2VsYWJsZSwgY29uc3QgU2NyaXB0VmFsdWUmIGRldGFpbCk7CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
RXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIGNvbnN0IFNjcmlw
dFZhbHVlJiBkZXRhaWwoKSBjb25zdCB7IHJldHVybiBtX2RldGFpbDsgfQogICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUoKSB7IHJldHVy
biBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rl
dmljZU1vdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlTW90aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRGV2aWNlTW90aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsMTUg
QEAgdm9pZCBEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbgogICAgIG1fZGV2aWNl
TW90aW9uRGF0YSA9IGRldmljZU1vdGlvbkRhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
RGV2aWNlTW90aW9uRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2Ug
RGV2aWNlTW90aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKICNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9y
RGV2aWNlTW90aW9uRXZlbnQ7CisgICAgcmV0dXJuIERldmljZU1vdGlvbkV2ZW50SW50ZXJmYWNl
VHlwZTsKICNlbHNlCiAgICAgLy8gRklYTUU6IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pIHNl
ZW1zIHRvIGJlIGluIGEgc3RyYW5nZSBzdGF0ZSB3aGVyZQogICAgIC8vIGl0IGlzIGhhbGYtZ3Vh
cmRlZCBieSAjaWZkZWZzLiBEZXZpY2VNb3Rpb25FdmVudC5pZGwgaXMgZ3VhcmRlZAogICAgIC8v
IGJ1dCBEZXZpY2VNb3Rpb25FdmVudC5jcHAgaXRzZWxmIGlzIHJlcXVpcmVkIGJ5IHVuZ2FyZGVk
IGNvZGUuCi0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JFdmVudDsKKyAgICBy
ZXR1cm4gRXZlbnRJbnRlcmZhY2VUeXBlOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9EZXZpY2VNb3Rpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VNb3Rpb25FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VNb3Rpb25EYXRhKiBkZXZpY2VNb3Rpb25EYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXZpY2VNb3Rpb25EYXRhLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
RXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBE
ZXZpY2VNb3Rpb25FdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVu
dGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VP
cmllbnRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNSAr
NTUsMTUgQEAgdm9pZCBEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2aWNlTwogICAgIG1f
b3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBEZXZp
Y2VPcmllbnRhdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNl
IERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yRGV2aWNlT3JpZW50YXRpb25FdmVudDsKKyAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRp
b25FdmVudEludGVyZmFjZVR5cGU7CiAjZWxzZQogICAgIC8vIEZJWE1FOiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKSBzZWVtcyB0byBiZSBpbiBhIHN0cmFuZ2Ugc3RhdGUgd2hlcmUKICAgICAv
LyBpdCBpcyBoYWxmLWd1YXJkZWQgYnkgI2lmZGVmcy4gRGV2aWNlT3JpZW50YXRpb25FdmVudC5p
ZGwgaXMgZ3VhcmRlZAogICAgIC8vIGJ1dCBEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcCBpdHNl
bGYgaXMgcmVxdWlyZWQgYnkgdW5nYXJkZWQgY29kZS4KLSAgICByZXR1cm4gZXZlbnROYW1lcygp
LmludGVyZmFjZUZvckV2ZW50OworICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5cGU7CiAjZW5k
aWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25FdmVu
dC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50
YXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAog
ICAgIERldmljZU9yaWVudGF0aW9uRGF0YSogb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X29yaWVudGF0aW9uLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBEZXZpY2VPcmllbnRhdGlvbkV2ZW50
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDkgKzY5LDkgQEAgRXJyb3JFdmVudDo6fkVycm9yRXZlbnQoKQogewogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIEVycm9yRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZh
Y2UgRXJyb3JFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudDsKKyAgICByZXR1cm4gRXJyb3JFdmVudElu
dGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0Vycm9yRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vy
cm9yRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgbGluZW5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CiAgICAgdW5z
aWduZWQgY29sbm8oKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQogCi0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgRXJyb3JFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEs
MTQgKzEyMSw5IEBAIHZvaWQgRXZlbnQ6OmluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcKICAg
ICBtX2NhbmNlbGFibGUgPSBjYW5jZWxhYmxlQXJnOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEV2ZW50OjpldmVu
dEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JFdmVudDsKLX0KLQotYm9vbCBFdmVudDo6aGFzSW50ZXJmYWNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaW50ZXJmYWNlTmFtZSgpID09IG5hbWU7Cisg
ICAgcmV0dXJuIEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogYm9vbCBFdmVudDo6aXNVSUV2ZW50
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2Rl
ZmluZSBFdmVudF9oCiAKICNpbmNsdWRlICJET01UaW1lU3RhbXAuaCIKLSNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KQEAgLTQ3LDYgKzQ3LDE0IEBAIHN0cnVjdCBFdmVudEluaXQgewogICAgIGJv
b2wgY2FuY2VsYWJsZTsKIH07CiAKK2VudW0gRXZlbnRJbnRlcmZhY2UgeworCisjZGVmaW5lIERP
TV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRShuYW1lKSBuYW1lIyNJbnRlcmZhY2VUeXBlLAorRE9N
X0VWRU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKQor
I3VuZGVmIERPTV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRQorCit9OworCiBjbGFzcyBFdmVudCA6
IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50PiB7CiBwdWJs
aWM6CiAgICAgZW51bSBQaGFzZVR5cGUgeyAKQEAgLTEyMCw4ICsxMjgsNyBAQCBwdWJsaWM6CiAK
ICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZERhdGEoKSBjb25zdCB7IHJldHVybiBpc0NsaXBib2Fy
ZEV2ZW50KCkgPyBjbGlwYm9hcmQoKSA6IDA7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNJbnRlcmZhY2UoY29u
c3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgZXZlbnRzIGFyZSBnZW5lcmFsIGNs
YXNzZXMgb2YgZXZlbnRzLgogICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBJTklUSUFMSVpFX0VWRU5UX05BTUUo
bmFtZSkgXAogICAgICwgbmFtZSMjRXZlbnQoI25hbWUsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpCiAKLSNkZWZpbmUgSU5JVElBTElaRV9FVkVOVF9JTlRFUkZBQ0UobmFtZSkg
XAotICAgICwgaW50ZXJmYWNlRm9yIyNuYW1lKCNuYW1lLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKQotCiBFdmVudE5hbWVzOjpFdmVudE5hbWVzKCkKICAgICA6IGR1bW15KDAp
Ci1ET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVOVF9OQU1FKQotRE9NX0VW
RU5UX0lOVEVSRkFDRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVOVF9JTlRFUkZBQ0UpCi1ET01f
RVZFTlRfVEFSR0VUX0lOVEVSRkFDRVNfRk9SX0VBQ0goSU5JVElBTElaRV9FVkVOVF9JTlRFUkZB
Q0UpCisgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKElOSVRJQUxJWkVfRVZFTlRfTkFNRSkK
IHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw2IEBACiAjaWZuZGVmIEV2ZW50TmFtZXNfaAogI2RlZmluZSBFdmVudE5hbWVzX2gKIAot
I2luY2x1ZGUgIkV2ZW50SW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0SW50ZXJm
YWNlcy5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtMjY4LDU3ICsyNjYsNDMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBlbmQgb2YgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNICiAKLSAgICBjbGFzcyBF
dmVudE5hbWVzIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnROYW1lcyk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBpbnQgZHVtbXk7IC8vIE5lZWRlZCB0byBt
YWtlIGluaXRpYWxpemF0aW9uIG1hY3JvIHdvcmsuCi0gICAgICAgIC8vIFByaXZhdGUgdG8gcHJl
dmVudCBhY2NpZGVudGFsIGNhbGwgdG8gRXZlbnROYW1lcygpIGluc3RlYWQgb2YgZXZlbnROYW1l
cygpCi0gICAgICAgIEV2ZW50TmFtZXMoKTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFRocmVhZEds
b2JhbERhdGE7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgICNkZWZpbmUgRE9NX0VWRU5UX05BTUVT
X0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OwotICAgICAgICBET01fRVZF
TlRfTkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUpCi0gICAgICAgICN1bmRl
ZiBET01fRVZFTlRfTkFNRVNfREVDTEFSRQotCi0gICAgICAgICNkZWZpbmUgRE9NX0VWRU5UX0lO
VEVSRkFDRV9ERUNMQVJFKG5hbWUpIEF0b21pY1N0cmluZyBpbnRlcmZhY2VGb3IjI25hbWU7Ci0g
ICAgICAgIERPTV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKERPTV9FVkVOVF9JTlRFUkZBQ0Vf
REVDTEFSRSkKLSAgICAgICAgRE9NX0VWRU5UX1RBUkdFVF9JTlRFUkZBQ0VTX0ZPUl9FQUNIKERP
TV9FVkVOVF9JTlRFUkZBQ0VfREVDTEFSRSkKLSAgICAgICAgI3VuZGVmIERPTV9FVkVOVF9JTlRF
UkZBQ0VfREVDTEFSRQotCi0gICAgICAgIGlubGluZSBib29sIGlzVG91Y2hFdmVudFR5cGUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBldmVudFR5cGUgPT0gdG91Y2hzdGFydEV2ZW50Ci0gICAgICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IHRvdWNobW92ZUV2ZW50Ci0gICAgICAgICAgICAgICAgfHwgZXZlbnRUeXBl
ID09IHRvdWNoZW5kRXZlbnQKLSAgICAgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2hj
YW5jZWxFdmVudDsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBib29sIGlzR2VzdHVyZUV2
ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBnZXN0dXJldGFwRXZlbnQKLSAgICAgICAg
ICAgICAgICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXRhcGRvd25FdmVudAotICAgICAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsc3RhcnRFdmVudAotICAgICAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBnZXN0dXJlc2Nyb2xsZW5kRXZlbnQKLSAgICAgICAgICAgICAg
ICB8fCBldmVudFR5cGUgPT0gZ2VzdHVyZXNjcm9sbHVwZGF0ZUV2ZW50OwotICAgICAgICB9Ci0K
LSAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG91Y2hFdmVudE5hbWVzKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gbmFtZXM7Ci0gICAgICAg
ICAgICBuYW1lcy5yZXNlcnZlQ2FwYWNpdHkoNCk7Ci0gICAgICAgICAgICBuYW1lcy5hcHBlbmQo
dG91Y2hzdGFydEV2ZW50KTsKLSAgICAgICAgICAgIG5hbWVzLmFwcGVuZCh0b3VjaG1vdmVFdmVu
dCk7Ci0gICAgICAgICAgICBuYW1lcy5hcHBlbmQodG91Y2hlbmRFdmVudCk7Ci0gICAgICAgICAg
ICBuYW1lcy5hcHBlbmQodG91Y2hjYW5jZWxFdmVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbmFt
ZXM7Ci0gICAgICAgIH0KLSAgICB9OworY2xhc3MgRXZlbnROYW1lcyB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRXZlbnROYW1lcyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGlu
dCBkdW1teTsgLy8gTmVlZGVkIHRvIG1ha2UgaW5pdGlhbGl6YXRpb24gbWFjcm8gd29yay4KKyAg
ICAvLyBQcml2YXRlIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBjYWxsIHRvIEV2ZW50TmFtZXMoKSBp
bnN0ZWFkIG9mIGV2ZW50TmFtZXMoKQorICAgIEV2ZW50TmFtZXMoKTsKKyAgICBmcmllbmQgY2xh
c3MgVGhyZWFkR2xvYmFsRGF0YTsKKworcHVibGljOgorICAgICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0RFQ0xBUkUobmFtZSkgQXRvbWljU3RyaW5nIG5hbWUjI0V2ZW50OworICAgIERPTV9FVkVO
VF9OQU1FU19GT1JfRUFDSChET01fRVZFTlRfTkFNRVNfREVDTEFSRSkKKyAgICAjdW5kZWYgRE9N
X0VWRU5UX05BTUVTX0RFQ0xBUkUKIAotICAgIGlubGluZSBFdmVudE5hbWVzJiBldmVudE5hbWVz
KCkKKyAgICBpbmxpbmUgYm9vbCBpc1RvdWNoRXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRocmVhZEdsb2JhbERhdGEo
KS5ldmVudE5hbWVzKCk7CisgICAgICAgIHJldHVybiBldmVudFR5cGUgPT0gdG91Y2hzdGFydEV2
ZW50CisgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gdG91Y2htb3ZlRXZlbnQKKyAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSB0b3VjaGVuZEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5
cGUgPT0gdG91Y2hjYW5jZWxFdmVudDsKICAgICB9CiAKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiB0b3VjaEV2ZW50TmFtZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEF0b21pY1N0
cmluZz4gbmFtZXM7CisgICAgICAgIG5hbWVzLnJlc2VydmVDYXBhY2l0eSg0KTsKKyAgICAgICAg
bmFtZXMuYXBwZW5kKHRvdWNoc3RhcnRFdmVudCk7CisgICAgICAgIG5hbWVzLmFwcGVuZCh0b3Vj
aG1vdmVFdmVudCk7CisgICAgICAgIG5hbWVzLmFwcGVuZCh0b3VjaGVuZEV2ZW50KTsKKyAgICAg
ICAgbmFtZXMuYXBwZW5kKHRvdWNoY2FuY2VsRXZlbnQpOworICAgICAgICByZXR1cm4gbmFtZXM7
CisgICAgfQorfTsKKworaW5saW5lIEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMoKQoreworICAgIHJl
dHVybiB0aHJlYWRHbG9iYWxEYXRhKCkuZXZlbnROYW1lcygpOworfQorCiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyTWFwLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0SW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmdIYXNoLmg+CkBAIC05OSwxMiArMTAwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgT3duUHRyPEZpcmluZ0V2ZW50SXRlcmF0b3JWZWN0b3I+IGZpcmluZ0V2ZW50
SXRlcmF0b3JzOwogICAgIH07CiAKKyAgICBlbnVtIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIHsKKwor
ICAgICNkZWZpbmUgRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKG5hbWUpIG5hbWUjI0V2ZW50
VGFyZ2V0SW50ZXJmYWNlVHlwZSwKKyAgICBET01fRVZFTlRfVEFSR0VUX0lOVEVSRkFDRVNfRk9S
X0VBQ0goRE9NX0VWRU5UX0lOVEVSRkFDRV9ERUNMQVJFKQorICAgICN1bmRlZiBET01fRVZFTlRf
SU5URVJGQUNFX0RFQ0xBUkUKKworICAgIH07CisKICAgICBjbGFzcyBFdmVudFRhcmdldCB7CiAg
ICAgcHVibGljOgogICAgICAgICB2b2lkIHJlZigpIHsgcmVmRXZlbnRUYXJnZXQoKTsgfQogICAg
ICAgICB2b2lkIGRlcmVmKCkgeyBkZXJlZkV2ZW50VGFyZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0ID0gMDsKKyAgICAg
ICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgTm9kZSogdG9O
b2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDkgKzM5LDkgQEAgRm9jdXNFdmVudEluaXQ6OkZvY3VzRXZlbnRJbml0KCkKIHsKIH0KIAot
Y29uc3QgQXRvbWljU3RyaW5nJiBGb2N1c0V2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50SW50ZXJmYWNlIEZvY3VzRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckZvY3VzRXZlbnQ7CisgICAgcmV0dXJuIEZv
Y3VzRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIEZvY3VzRXZlbnQ6OmlzRm9jdXNFdmVu
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOyB9CiAgICAgdm9pZCBzZXRSZWxhdGVk
VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpIHsgbV9yZWxhdGVk
VGFyZ2V0ID0gcmVsYXRlZFRhcmdldDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2
ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNFdmVudCgpIGNv
bnN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0dlc3R1cmVFdmVudC5jcHAJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMTAgQEAgdm9pZCBHZXN0dXJlRXZlbnQ6OmluaXRH
ZXN0dXJlRXZlbnQoY29ucwogICAgIGluaXRDb29yZGluYXRlcyhJbnRQb2ludChjbGllbnRYLCBj
bGllbnRZKSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgR2VzdHVyZUV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIEdlc3R1cmVFdmVudDo6ZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1l
LCAoIlRCREludGVyZmFjZSIpKTsKLSAgICByZXR1cm4gbmFtZTsKKyAgICAvLyBGSVhNRTogVGhp
cyBtYWtlcyBpdCBzbyB3ZSBuZXZlciB3cmFwIEdlc3R1cmVFdmVudHMgaW4gdGhlIHJpZ2h0IGJp
bmRpbmdzLgorICAgIHJldHVybiBFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIEdlc3R1cmVFdmVu
dDo6R2VzdHVyZUV2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50LmgJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9HZXN0dXJlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRHZXN0dXJl
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4s
IGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IGNsaWVudFgsIGludCBjbGllbnRZLCBib29s
IGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIGZsb2F0
IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVu
dEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4g
bV9kZWx0YVg7IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIG9sZFVSTCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2xkVVJMOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuZXdVUkwoKSBjb25z
dCB7IHJldHVybiBtX25ld1VSTDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9y
SGFzaENoYW5nZUV2ZW50OyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVy
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuIEhhc2hDaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7IH0KIAog
cHJpdmF0ZToKICAgICBIYXNoQ2hhbmdlRXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0tleWJvYXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9LZXli
b2FyZEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOSArMTg4LDkgQEAgaW50IEtl
eWJvYXJkRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
Pih0ZXh0LmNoYXJhY3RlclN0YXJ0aW5nQXQoMCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IEtleWJvYXJkRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgS2V5
Ym9hcmRFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yS2V5Ym9hcmRFdmVudDsKKyAgICByZXR1cm4gS2V5Ym9hcmRFdmVu
dEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgS2V5Ym9hcmRFdmVudDo6aXNLZXlib2FyZEV2ZW50
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTU2
MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICBpbnQga2V5Q29kZSgpIGNvbnN0OyAv
LyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Iga2V5cHJlc3MK
ICAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsgLy8gY2hhcmFjdGVyIGNvZGUgZm9yIGtleXByZXNz
LCAwIGZvciBrZXlkb3duIGFuZCBrZXl1cAogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2
ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDkgKzE2Niw5IEBA
IHZvaWQgTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KGNvbnMKICAgICBpbml0TWVzc2Fn
ZUV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZl
bnRJZCwgc291cmNlLCBwb3J0cy5yZWxlYXNlKCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IE1lc3NhZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBNZXNz
YWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvck1lc3NhZ2VFdmVudDsKKyAgICByZXR1cm4gTWVzc2FnZUV2ZW50SW50
ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
ICAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQoKTsKICAgICB2b2lkIGluaXRNZXNzYWdlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxh
YmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgU3RyaW5n
JiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNlLCBN
ZXNzYWdlUG9ydCopOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNl
KCkgY29uc3Q7CiAKICAgICBlbnVtIERhdGFUeXBlIHsKICAgICAgICAgRGF0YVR5cGVTY3JpcHRW
YWx1ZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkocmV2aXNpb24gMTU2MjM0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQoKQog
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmlu
ZyYgTWVzc2FnZVBvcnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgTWVzc2FnZVBvcnQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1lc3NhZ2VQb3J0OworICAgIHJldHVybiBNZXNz
YWdlUG9ydEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogTWVzc2FnZVBvcnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKIAot
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlUG9ydCgpIGNvbnN0IE9WRVJSSURFIEZJTkFM
IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzUsOSArMTc1LDkgQEAgdm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VF
dmVudChjb25zdCBBdAogICAgIC8vIEZJWE1FOiBtX2NsaXBib2FyZCBpcyBub3Qgc2V0IHRvIDAg
aGVyZS4KIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNb3VzZUV2ZW50OjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE1vdXNlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck1vdXNlRXZlbnQ7Cisg
ICAgcmV0dXJuIE1vdXNlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiBib29sIE1vdXNlRXZlbnQ6
OmlzTW91c2VFdmVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgQ2xpcGJvYXJkKiBkYXRhVHJh
bnNmZXIoKSBjb25zdCB7IHJldHVybiBpc0RyYWdFdmVudCgpID8gbV9jbGlwYm9hcmQuZ2V0KCkg
OiAwOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25F
dmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCB2b2lkIE11dGF0aW9u
RXZlbnQ6OmluaXRNdXRhdGlvbkV2ZW50KGNvCiAgICAgbV9hdHRyQ2hhbmdlID0gYXR0ckNoYW5n
ZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNdXRhdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1l
KCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIE11dGF0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck11dGF0aW9uRXZl
bnQ7CisgICAgcmV0dXJuIE11dGF0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHJldmlz
aW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
dHJpbmcgYXR0ck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJOYW1lOyB9CiAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJDaGFuZ2U7IH0K
IAotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBNdXRhdGlvbkV2ZW50KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjMsOSArMTgyMyw5IEBAIE5vZGUqIE5vZGU6OmVuY2xv
c2luZ0xpbmtFdmVudFBhcmVudE9yU2UKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBOb2RlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IE5vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvck5vZGU7CisgICAgcmV0dXJuIE5vZGVFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7CiB9CiAKIHZvaWQgTm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQq
IG9sZERvY3VtZW50KQpAQCAtMjE5Miw3ICsyMTkyLDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldgogICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpOwogI2VuZGlmCiAgICAgfSBl
bHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7Ci0gICAg
ICAgIGlmIChldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0
RXZlbnQpKQorICAgICAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50
SW50ZXJmYWNlVHlwZSkKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRU
ZXh0SW5wdXRFdmVudEhhbmRsZXIoc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKICNp
ZiBFTkFCTEUoUEFOX1NDUk9MTElORykKQEAgLTIyMTIsNyArMjIxMiw3IEBAIHZvaWQgTm9kZTo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXYKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCi0gICAgfSBlbHNlIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVlbEV2
ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBldmVu
dC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkgewor
ICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgZXZlbnQtPmV2ZW50
SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgV2hlZWxF
dmVudCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIHNlbmQgdGhlIHdo
ZWVsIGV2ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdlIGZpbmQgd2l0aCBhIHJlbmRlcmVyLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgTm9kZSogdG9Ob2RlKCk7CiAgICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0b0lucHV0
RWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREUg
RklOQUw7IC8vIEltcGxlbWVudGVkIGluIERvY3VtZW50LmgKIAogICAgIHZpcnR1YWwgYm9vbCBh
ZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL092ZXJmbG93RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9P
dmVyZmxvd0V2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L092ZXJmbG93RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw5IEBAIE92ZXJm
bG93RXZlbnQ6Ok92ZXJmbG93RXZlbnQoY29uc3QgQXRvbWkKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBPdmVyZmxvd0V2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJm
YWNlIE92ZXJmbG93RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvck92ZXJmbG93RXZlbnQ7CisgICAgcmV0dXJuIE92ZXJm
bG93RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB2b2lkIE92ZXJmbG93RXZlbnQ6OmluaXRPdmVy
Zmxvd0V2ZW50KHVuc2lnbmVkIHNob3J0IG9yaWVudCwgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3cs
IGJvb2wgdmVydGljYWxPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxv
d0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQu
aAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBob3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxPdmVyZmxvdzsgfQog
ICAgIGJvb2wgdmVydGljYWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxPdmVy
ZmxvdzsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgT3ZlcmZsb3dFdmVudCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw5ICs1Niw5IEBAIFBhZ2VUcmFuc2l0aW9uRXZlbnQ6On5QYWdlVHJhbnNpdGlvbkV2ZW4K
IHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBQYWdlVHJhbnNpdGlvbkV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmV2ZW50
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
clBhZ2VUcmFuc2l0aW9uRXZlbnQ7CisgICAgcmV0dXJuIFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+UGFnZVRyYW5zaXRpb25FdmVudCgp
OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAK
ICAgICBib29sIHBlcnNpc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzgsOSArNzgsOSBAQCBQYXNzUmVmUHRyPFBvcFN0YXRlRXZlbnQ+IFBvcFN0YXRlRXZlbnQ6CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7
CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUG9wU3RhdGVFdmVudDo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0CitFdmVudEludGVyZmFjZSBQb3BTdGF0ZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQb3BTdGF0ZUV2ZW50
OworICAgIHJldHVybiBQb3BTdGF0ZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTY3JpcHRWYWx1ZSYg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgSGlzdG9yeSogaGlzdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50
ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUG9wU3RhdGVF
dmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmNwcAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIFByb2dyZXNzRXZlbnQ6OlByb2dyZXNzRXZlbnQoY29u
c3QgQXRvbWkKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBQcm9ncmVzc0V2ZW50OjppbnRl
cmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFByb2dyZXNzRXZlbnQ6OmV2ZW50SW50
ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclBy
b2dyZXNzRXZlbnQ7CisgICAgcmV0dXJuIFByb2dyZXNzRXZlbnRJbnRlcmZhY2VUeXBlOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQoKSBj
b25zdCB7IHJldHVybiBtX2xvYWRlZDsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG90YWw7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBl
dmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgUHJvZ3Jlc3NFdmVudCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBA
IHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUZpbGUoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUZpbGU7IH0KICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZU51bWJlcjsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU2VjdXJpdHlQb2xp
Y3lWaW9sYXRpb25FdmVudDsgfQorICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRl
cmZhY2UoKSBjb25zdCB7IHJldHVybiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50SW50ZXJm
YWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAgIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOSAr
MTE0LDkgQEAgdm9pZCBUZXh0RXZlbnQ6OmluaXRUZXh0RXZlbnQoY29uc3QgQXRvbQogICAgIG1f
ZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVGV4dEV2ZW50OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRleHRFdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50
OworICAgIHJldHVybiBUZXh0RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgICAgICBTdHJpbmcgZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgRXZlbnRJbnRl
cmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgICAgICBib29sIGlzTGluZUJyZWFr
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXRMaW5lQnJlYWs7
IH0KICAgICAgICAgYm9vbCBpc0NvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5
cGUgPT0gVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1RvdWNoRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3Vj
aEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RvdWNo
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBAIHZvaWQgVG91Y2hFdmVu
dDo6aW5pdFRvdWNoRXZlbnQoVG91Y2hMaXMKIAogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRv
dWNoRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgVG91Y2hFdmVu
dDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yVG91Y2hFdmVudDsKKyAgICByZXR1cm4gVG91Y2hFdmVudEludGVyZmFjZVR5cGU7
CiB9CiAKIGJvb2wgVG91Y2hFdmVudDo6aXNUb3VjaEV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1RvdWNoRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1RvdWNoRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50KCkgY29uc3QgT1ZFUlJJREU7CiAK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBUb3VjaEV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJhbnNp
dGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJhbnNpdGlv
bkV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyYW5z
aXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgY29uc3QgU3Ry
aW5nJiBUcmFuc2l0aW9uRXZlbnQ6OnBzZXVkb0VsZQogICAgIHJldHVybiBtX3BzZXVkb0VsZW1l
bnQ7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgVHJhbnNpdGlvbkV2ZW50OjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFRyYW5zaXRpb25FdmVudDo6ZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVHJhbnNp
dGlvbkV2ZW50OworICAgIHJldHVybiBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJhbnNp
dGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyYW5zaXRpb25F
dmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJhbnNpdGlv
bkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIGRv
dWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgcHNldWRvRWxlbWVu
dCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgVHJhbnNpdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVUlFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1VJRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVUlF
dmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDkgQEAgYm9vbCBVSUV2ZW50Ojpp
c1VJRXZlbnQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBBdG9taWNTdHJp
bmcmIFVJRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgVUlFdmVu
dDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yVUlFdmVudDsKKyAgICByZXR1cm4gVUlFdmVudEludGVyZmFjZVR5cGU7CiB9CiAK
IGludCBVSUV2ZW50OjprZXlDb2RlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9V
SUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaAkocmV2
aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgQWJzdHJhY3RWaWV3KiB2aWV3KCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9CiAgICAgaW50IGRldGFpbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGV0YWlsOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRl
cmZhY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGludCBrZXlDb2RlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
V2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDkgKzY5LDkgQEAgZG91YmxlIFdlYktpdEFuaW1hdGlvbkV2ZW50OjplbGFwc2VkVGltZQogICAg
IHJldHVybiBtX2VsYXBzZWRUaW1lOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYktpdEFu
aW1hdGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNlIFdlYktp
dEFuaW1hdGlvbkV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJLaXRBbmltYXRpb25FdmVudDsKKyAgICByZXR1cm4g
V2ViS2l0QW5pbWF0aW9uRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaAko
cmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0OwogICAgIGRvdWJsZSBlbGFwc2VkVGltZSgp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0QW5pbWF0aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQw
LDkgKzI0MCw5IEBAIHZvaWQgV2ViS2l0TmFtZWRGbG93OjpkaXNwYXRjaFJlZ2lvbk92ZXIKICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXZWJLaXRO
YW1lZEZsb3c6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgV2Vi
S2l0TmFtZWRGbG93OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJLaXROYW1lZEZsb3c7CisgICAgcmV0dXJuIFdl
YktpdE5hbWVkRmxvd0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogV2ViS2l0TmFtZWRGbG93OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmgJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJLaXRO
YW1lZEZsb3c+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJLaXROYW1lZEZsb3c+Ojpk
ZXJlZjsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgZnJvbSB0aGUgSlMgYmluZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgTmFtZWRGbG93
IG9iamVjdCBpcyByZWFjaGFibGUgb3Igbm90LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdFRyYW5zaXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw5ICs3NSw5IEBAIGNvbnN0IFN0cmluZyYgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojpwc2UKICAg
ICByZXR1cm4gbV9wc2V1ZG9FbGVtZW50OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYktp
dFRyYW5zaXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudEludGVyZmFjZSBX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldlYktpdFRyYW5zaXRpb25FdmVudDsKKyAgICBy
ZXR1cm4gV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25F
dmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRy
YW5zaXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
ICAgICBkb3VibGUgZWxhcHNlZFRpbWUoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHBzZXVk
b0VsZW1lbnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRl
cmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVy
ZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdlYktpdFRyYW5zaXRpb25FdmVudCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSAr
MTE1LDkgQEAgdm9pZCBXaGVlbEV2ZW50Ojppbml0V2ViS2l0V2hlZWxFdmVudChpbgogICAgICAg
ICAgICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXkpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFdoZWVsRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRJbnRlcmZhY2UgV2hlZWxFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJl
dHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudDsKKyAgICByZXR1cm4gV2hl
ZWxFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIGJvb2wgV2hlZWxFdmVudDo6aXNNb3VzZUV2ZW50
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NyArOTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBsZWdhY3kg
c3VwcG9ydAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbERl
bHRhLngoKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZpc2lvbiAxNTYy
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw5ICs2OSw5IEBAIEZpbGVSZWFkZXI6On5GaWxlUmVhZGVyKCkKICAgICB0ZXJt
aW5hdGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBGaWxlUmVhZGVyOjppbnRlcmZhY2VO
YW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIEZpbGVSZWFkZXI6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckZpbGVSZWFkZXI7CisgICAgcmV0dXJuIEZpbGVSZWFkZXJFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7CiB9CiAKIGJvb2wgRmlsZVJlYWRlcjo6Y2FuU3VzcGVuZCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcg
QEAgcHVibGljOgogICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsKIAogICAgIC8vIEV2ZW50VGFy
Z2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7IH0KIAogICAgIC8vIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24g
MTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6dXBkYXRlRm9jdXNBcHAKIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5oYXNJbnRl
cmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpIHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCisgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2
ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+ZXZl
bnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQogICAgICAgICBmb3J3YXJkRXZlbnQoZXZlbnQp
OwogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoKSkKICAgICAgICAgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoc3RhdGljX2Nh
c3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDksOSAr
NjQ5LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OnJldHVyblRvUmVhbHRpbWUoKQogICAgICAg
ICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5yZXR1cm5Ub1JlYWx0aW1lKCk7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sbGVyOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2
ZW50VGFyZ2V0SW50ZXJmYWNlIE1lZGlhQ29udHJvbGxlcjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFDb250
cm9sbGVyOworICAgIHJldHVybiBNZWRpYUNvbnRyb2xsZXJFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7CiB9CiAKIC8vIFRoZSBzcGVjIHNheXMgdG8gZmlyZSBwZXJpb2RpYyB0aW1ldXBkYXRlIGV2
ZW50cyAodGhvc2Ugc2VudCB3aGlsZSBwbGF5aW5nKSBldmVyeQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL01lZGlhQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL01lZGlhQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAgcHJpdmF0ZToKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIE9WRVJSSURFIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVu
dFRhcmdldCgpIE9WRVJSSURFIHsgZGVyZWYoKTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgfTsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0
YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRh
OyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEmIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
IE9WRVJSSURFIHsgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL01lZGlhS2V5RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFLZXlFdmVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFLZXlFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkg
QEAgTWVkaWFLZXlFdmVudDo6fk1lZGlhS2V5RXZlbnQoKQogewogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIE1lZGlhS2V5RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZh
Y2UgTWVkaWFLZXlFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTWVkaWFLZXlFdmVudDsKKyAgICByZXR1cm4gTWVkaWFL
ZXlFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvTWVkaWFLZXlFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhS2V5RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFLZXlFdmVu
dCh0eXBlLCBpbml0aWFsaXplcikpOwogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFj
ZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGtleVN5c3RlbSgpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5U3lzdGVtOyB9CiAgICAgU3RyaW5nIHNlc3Npb25JZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Vzc2lvbklkOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGVsZW1lbnQoKS5yZW5kZXJlcigpICYmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmhhc0ludGVy
ZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmZvY3VzRXZlbnQpKSB7CisgICAgaWYgKGVsZW1lbnQoKS5yZW5kZXJlcigpICYmIChldmVu
dC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmV2ZW50
SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmZvY3VzRXZlbnQpKSB7CiAgICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVu
ZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCku
cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5i
bHVyRXZlbnQpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKSkgewpAQCAtMTk4LDcgKzE5OCw3IEBA
IHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQKIAogYm9vbCBUZXh0Rmll
bGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50KQogewotICAg
IHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYg
ZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50KSAm
JiBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8fCBJbnB1
dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOworICAgIHJldHVybiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZlbnQtPmV2ZW50SW50
ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNlVHlwZSAmJiBzdGF0aWNfY2FzdDxUZXh0RXZl
bnQqPihldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8fCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdElt
cGxpY2l0bHkoZXZlbnQpOwogfQogCiBSZW5kZXJFbGVtZW50KiBUZXh0RmllbGRJbnB1dFR5cGU6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hJiBhcmVuYSwgUmVuZGVyU3R5bGUmKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50
LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIFdlYkdM
Q29udGV4dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQoKQogewogfQogCi1jb25zdCBBdG9taWNT
dHJpbmcmIFdlYkdMQ29udGV4dEV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50
ZXJmYWNlIFdlYkdMQ29udGV4dEV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXZWJHTENvbnRleHRFdmVudDsKKyAgICBy
ZXR1cm4gV2ViR0xDb250ZXh0RXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRF
dmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
cHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXNNZXNzYWdlOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJHTENvbnRleHRFdmVudCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBw
bGUuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xzQXBwbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsOSArNjAxLDcgQEAg
dm9pZCBNZWRpYUNvbnRyb2xzQXBwbGVFdmVudExpc3RlbmVyOjpoYQogewogICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQogICAgICAgICBtX21lZGlhQ29u
dHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQoZXZlbnQpOwotCi0gICAgZWxzZSBpZiAoKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQotICAgICAgICAmJiBldmVudC0+aGFzSW50ZXJmYWNl
KGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkgeworICAgIGVsc2UgaWYgKChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNl
KCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgV2hlZWxFdmVudCogd2hl
ZWxFdmVudCA9IHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCk7CiAgICAgICAgIGlmICht
X21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25zQ29udGFpbmVyUHJldmVudFBhZ2VT
Y3JvbGxpbmcod2hlZWxFdmVudC0+d2hlZWxEZWx0YVkoKSkpCiAgICAgICAgICAgICBldmVudC0+
cHJldmVudERlZmF1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5C
dXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TcGluQnV0dG9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDcgKzE1MSw3IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmZvcndhcmRFdmVudChFdmUK
ICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWV2ZW50
LT5oYXNJbnRlcmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpKQorICAg
IGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSAhPSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3NwaW5CdXR0b25Pd25lcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwCShyZXZpc2lvbiAx
NTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBAQCBBdWRpb1RyYWNrKiBBdWRpb1RyYWNrTGlz
dDo6Z2V0VHJhY2tCeUlkCiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
QXVkaW9UcmFja0xpc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgQXVkaW9UcmFja0xpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvVHJhY2tMaXN0OworICAgIHJldHVy
biBBdWRpb1RyYWNrTGlzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5k
KFBhc3NSZWZQdHI8QXVkaW9UcmFjaz4pOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBBdWRpb1RyYWNrTGlzdChIVE1MTWVkaWFF
bGVtZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsOSArMTQ3
LDkgQEAgVGV4dFRyYWNrOjp+VGV4dFRyYWNrKCkKICAgICBjbGVhckNsaWVudCgpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFRleHRUcmFjazo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dFRhcmdldEludGVyZmFjZSBUZXh0VHJhY2s6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRUcmFjazsKKyAgICBy
ZXR1cm4gVGV4dFRyYWNrRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBUZXh0VHJhY2s6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCShyZXZpc2lvbiAxNTYyMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VGV4dFRyYWNr
KCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25N
ZW51T2ZmSXRlbSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tD
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU0LDkgKzExNTQsOSBAQCBzdGQ6
OnBhaXI8ZG91YmxlLCBkb3VibGU+IFRleHRUcmFja0N1ZTo6CiAgICAgcmV0dXJuIG1fZGlzcGxh
eVBvc2l0aW9uOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFRleHRUcmFja0N1ZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBUZXh0VHJhY2tDdWU6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvclRleHRUcmFja0N1ZTsKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlRXZlbnRUYXJnZXRJ
bnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBUZXh0VHJhY2tDdWU6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUz
LDcgQEAgcHVibGljOgogICAgIGludCBjYWxjdWxhdGVDb21wdXRlZExpbmVQb3NpdGlvbigpOwog
ICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+
IGdldENTU1Bvc2l0aW9uKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw5ICsy
MjMsOSBAQCBib29sIFRleHRUcmFja0xpc3Q6OmNvbnRhaW5zKFRyYWNrQmFzZSogCiAgICAgcmV0
dXJuIHRyYWNrcy0+ZmluZCh0cmFjaykgIT0gbm90Rm91bmQ7CiB9CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgVGV4dFRyYWNrTGlzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldElu
dGVyZmFjZSBUZXh0VHJhY2tMaXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0VHJhY2tMaXN0OworICAgIHJl
dHVybiBUZXh0VHJhY2tMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZShUcmFja0Jhc2UqKSBPVkVSUklERTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgVGV4dFRyYWNrTGlzdChIVE1MTWVk
aWFFbGVtZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5
ICs1Miw5IEBAIFRyYWNrRXZlbnQ6On5UcmFja0V2ZW50KCkKIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBUcmFja0V2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50SW50ZXJmYWNl
IFRyYWNrRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvclRyYWNrRXZlbnQ7CisgICAgcmV0dXJuIFRyYWNrRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYWNrRXZlbnQodHlw
ZSwgaW5pdGlhbGl6ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZl
bnRJbnRlcmZhY2UoKSBjb25zdDsKIAogICAgIFRyYWNrQmFzZSogdHJhY2soKSBjb25zdCB7IHJl
dHVybiBtX3RyYWNrLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VHJhY2tMaXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VHJhY2tMaXN0QmFzZS5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RyYWNrTGlzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShUcmFja0Jhc2UqKTsKIAogICAgIC8vIEV2
ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0ID0gMDsKICAgICB1c2luZyBSZWZDb3VudGVkPFRyYWNrTGlzdEJh
c2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxUcmFja0xpc3RCYXNlPjo6ZGVyZWY7CiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDkgKzkwLDkgQEAgbG9uZyBWaWRlb1RyYWNrTGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbgog
ICAgIHJldHVybiAtMTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBWaWRlb1RyYWNrTGlzdDo6
aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBWaWRlb1RyYWNrTGlz
dDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yVmlkZW9UcmFja0xpc3Q7CisgICAgcmV0dXJuIFZpZGVvVHJhY2tMaXN0
RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxWaWRl
b1RyYWNrPik7CiAKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBFdmVu
dFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwog
CiBwcml2YXRlOgogICAgIFZpZGVvVHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1lbnQqLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
RE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsxMDQsOSBAQCB2b2lkIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmFib3J0KCkKICAgICAgICAgY2FjaGVIb3N0LT5hYm9ydCgpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZl
bnRUYXJnZXRJbnRlcmZhY2UgRE9NQXBwbGljYXRpb25DYWNoZTo6ZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRE9NQXBw
bGljYXRpb25DYWNoZTsKKyAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNoZUV2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogRE9NQXBwbGljYXRp
b25DYWNoZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2FjaGVkKTsKICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG9ic29sZXRlKTsKIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Owog
CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdG9FdmVudFR5cGUoQXBwbGljYXRpb25D
YWNoZUhvc3Q6OkV2ZW50SUQgaWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAko
cmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsOSArNDI0LDkgQEAgRE9NV2luZG93Ojp+RE9NV2luZG93KCkK
ICAgICByZW1vdmVBbGxCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVycyh0aGlzKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBET01XaW5kb3c6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRU
YXJnZXRJbnRlcmZhY2UgRE9NV2luZG93OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JET01XaW5kb3c7CisgICAgcmV0
dXJuIERPTVdpbmRvd0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogRE9NV2luZG93OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gdGhlIG5ldHdvcmsgbG9hZC4gU2VlIGFs
c28gU2VjdXJpdHlDb250ZXh0Ojppc1NlY3VyZVRyYW5zaXRpb25Uby4KICAgICAgICAgdm9pZCBk
aWRTZWN1cmVUcmFuc2l0aW9uVG8oRG9jdW1lbnQqKTsKIAotICAgICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgRE9NV2luZG93KiB0b0RPTVdpbmRvdygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDks
OSArMjA5LDkgQEAgdm9pZCBFdmVudFNvdXJjZTo6Y2xvc2UoKQogICAgIH0KIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBFdmVudFNvdXJjZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRh
cmdldEludGVyZmFjZSBFdmVudFNvdXJjZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnRTb3VyY2U7CisgICAg
cmV0dXJuIEV2ZW50U291cmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZpc2lvbiAxNTYyMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+Ojpy
ZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxFdmVudFNvdXJjZT46OmRlcmVmOwogCi0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNw
cAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDkgKzY3LDkgQEAgUGVyZm9ybWFuY2U6On5QZXJmb3Jt
YW5jZSgpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgUGVyZm9ybWFuY2U6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJbnRlcmZhY2UgUGVyZm9ybWFuY2U6OmV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFj
ZUZvclBlcmZvcm1hbmNlOworICAgIHJldHVybiBQZXJmb3JtYW5jZUV2ZW50VGFyZ2V0SW50ZXJm
YWNlVHlwZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUGVyZm9ybWFuY2U6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2Uu
aAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQZXJmb3JtYW5jZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFBlcmZvcm1hbmNlKGZyYW1lKSk7IH0KICAgICB+UGVyZm9ybWFuY2UoKTsKIAotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0OwogCiAgICAgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0RXZlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5jcHAJKHJl
dmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDkgQEAgU3BlZWNoSW5wdXRFdmVudDo6flNw
ZWVjaElucHV0RXZlbnQoKQogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNwZWVjaElucHV0
RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgU3BlZWNoSW5wdXRF
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU3BlZWNoSW5wdXRFdmVudDsKKyAgICByZXR1cm4gU3BlZWNoSW5wdXRFdmVu
dEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICBTcGVlY2hJbnB1dFJlc3VsdExpc3QqIHJlc3VsdHMo
KSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdHMuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudElu
dGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNwZWVjaElu
cHV0RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAJ
KHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsOSBAQCB2b2lkIFN0b3JhZ2VFdmVudDo6
aW5pdFN0b3JhZ2VFdmVudChjb25zCiAgICAgbV9zdG9yYWdlQXJlYSA9IHN0b3JhZ2VBcmVhOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFN0b3JhZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0CitFdmVudEludGVyZmFjZSBTdG9yYWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclN0b3JhZ2VFdmVudDsKKyAg
ICByZXR1cm4gU3RvcmFnZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oCShyZXZpc2lv
biAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBOZWVkZWQgb25jZSB3
ZSBzdXBwb3J0IGluaXQ8Ymxhbms+RXZlbnROUwogICAgIC8vIHZvaWQgaW5pdFN0b3JhZ2VFdmVu
dE5TKGluIERPTVN0cmluZyBuYW1lc3BhY2VVUkksIGluIERPTVN0cmluZyB0eXBlQXJnLCBpbiBi
b29sZWFuIGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCBpbiBET01TdHJp
bmcga2V5QXJnLCBpbiBET01TdHJpbmcgb2xkVmFsdWVBcmcsIGluIERPTVN0cmluZyBuZXdWYWx1
ZUFyZywgaW4gRE9NU3RyaW5nIHVybEFyZywgU3RvcmFnZSBzdG9yYWdlQXJlYUFyZyk7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBTdG9yYWdlRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDkgKzIxMSw5IEBA
IHZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW4KICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBTVkdFbGVtZW50SW5zdGFuY2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgU1ZHRWxlbWVudEluc3RhbmNlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTVkdFbGVtZW50SW5zdGFu
Y2U7CisgICAgcmV0dXJuIFNWR0VsZW1lbnRJbnN0YW5jZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU1ZHRWxlbWVudEluc3RhbmNlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlLmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFBhcmVudE5vZGUoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5j
ZSkgeyBtX3BhcmVudEluc3RhbmNlID0gaW5zdGFuY2U7IH0KIAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDkgKzY5LDkgQEAgU1ZHUG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjbwogICAg
IHJldHVybiBtX25ld1RyYW5zbGF0ZTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTVkdab29t
RXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorRXZlbnRJbnRlcmZhY2UgU1ZHWm9vbUV2ZW50
OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JTVkdab29tRXZlbnQ7CisgICAgcmV0dXJuIFNWR1pvb21FdmVudEludGVyZmFjZVR5
cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdab29tRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9v
bUV2ZW50LmgJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29t
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBT
VkdQb2ludCBuZXdUcmFuc2xhdGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudEludGVyZmFj
ZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR1pvb21FdmVudCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw5ICs1Niw5IEBAIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjp+RGVkaWNhdGVkV28KIHsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7CisgICAg
cmV0dXJuIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBl
OwogfQogCiB2b2lkIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZShQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291
cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB2b2lkIGltcG9ydFNjcmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2Vw
dGlvbkNvZGUmKSBPVkVSUklERTsKIAogICAgICAgICAvLyBFdmVudFRhcmdldAotICAgICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURF
OworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgICAgIC8vIE5lZWRlZCBmb3IgT2JqZWN0aXZlLUMgYmluZGluZ3Mg
KHNlZSBidWcgMjg3NzQpLgpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2Vy
LmNwcAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRX
b3JrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw5ICs4Nyw5IEBAIFNoYXJlZFdvcmtlcjo6
flNoYXJlZFdvcmtlcigpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU2hhcmVkV29ya2Vy
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFNoYXJlZFdvcmtl
cjo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yU2hhcmVkV29ya2VyOworICAgIHJldHVybiBTaGFyZWRXb3JrZXJFdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgTWVzc2FnZVBvcnQq
IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnQuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAg
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgT1ZFUlJJREU7CiAKICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBTaGFyZWRX
b3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDE1NjIz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw5ICs3MCw5IEBAIFNoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
Ojp+U2hhcmVkV29ya2VyR2wKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFj
ZSBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGU7CisgICAgcmV0dXJuIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlRXZlbnRUYXJnZXRJbnRl
cmZhY2VUeXBlOwogfQogCiBTaGFyZWRXb3JrZXJUaHJlYWQqIFNoYXJlZFdvcmtlckdsb2JhbFNj
b3BlOjp0aHJlYWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUv
d29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU2hh
cmVkV29ya2VyR2xvYmFsU2NvcGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBFdmVu
dFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IE9WRVJSSURFOwog
CiAgICAgICAgIC8vIFNldHRlcnMvR2V0dGVycyBmb3IgYXR0cmlidXRlcyBpbiBTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZS5pZGwKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uihjb25uZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDE1
NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDkgKzEwOCw5IEBAIFdvcmtlcjo6fldvcmtlcigpCiAgICAgbV9jb250ZXh0UHJv
eHktPndvcmtlck9iamVjdERlc3Ryb3llZCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdv
cmtlcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVudFRhcmdldEludGVyZmFjZSBXb3JrZXI6
OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZlbnROYW1lcygp
LmludGVyZmFjZUZvcldvcmtlcjsKKyAgICByZXR1cm4gV29ya2VyRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOwogfQogCiB2b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2Rl
JiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdv
cmtlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2aXJ0dWFsIH5Xb3JrZXIoKTsKIAotICAgICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURF
OworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRBcnJh
eSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBi
aW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDE1NjIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDUsOSArMTMwNSw5IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIEFjdGl2ZURPTU9iamVjdDo6Y29u
dGV4dERlc3Ryb3llZCgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFhNTEh0dHBSZXF1ZXN0
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIFhNTEh0dHBSZXF1
ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JYTUxIdHRwUmVxdWVzdDsKKyAgICByZXR1cm4gWE1MSHR0cFJlcXVl
c3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IFhNTEh0dHBSZXF1ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFRpbWVvdXQoKTsKICNlbmRpZgogCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7CiAKICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQuaAkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBsb2FkZWQoKTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUoKSBjb25z
dCB7IHJldHVybiB0b3RhbCgpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ7IH0KKyAgICB2aXJ0dWFsIEV2ZW50SW50ZXJmYWNl
IGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50SW50ZXJmYWNlVHlwZTsgfQogCiBwcml2YXRlOgogICAgIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudCgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBs
b2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RV
cGxvYWQuY3BwCShyZXZpc2lvbiAxNTYyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RVcGxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIFhNTEh0
dHBSZXF1ZXN0VXBsb2FkOjpYTUxIdHRwUmVxdWVzdFVwbG8KIHsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CitFdmVu
dFRhcmdldEludGVyZmFjZSBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yWE1MSHR0
cFJlcXVlc3RVcGxvYWQ7CisgICAgcmV0dXJuIFhNTEh0dHBSZXF1ZXN0VXBsb2FkRXZlbnRUYXJn
ZXRJbnRlcmZhY2VUeXBlOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAkocmV2aXNpb24gMTU2MjM0KQorKysg
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlcmVm
KCkgeyBtX3htbEh0dHBSZXF1ZXN0LT5kZXJlZigpOyB9CiAgICAgICAgIFhNTEh0dHBSZXF1ZXN0
KiB4bWxIdHRwUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1feG1sSHR0cFJlcXVlc3Q7IH0KIAot
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3Q7CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGFib3J0KTsK
</data>
<flag name="review"
          id="234467"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="234468"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>