<?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>20676</bug_id>
          
          <creation_ts>2008-09-05 15:23:39 -0700</creation_ts>
          <short_desc>Safari 4dp crashes while executing &quot;undo&quot; in gmail</short_desc>
          <delta_ts>2008-12-22 15:21:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>19703</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug, InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dev+webkit</cc>
    
    <cc>feng</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90316</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-05 15:23:39 -0700</bug_when>
    <thetext>I&apos;m so sad when Safari crashes. :(

This might have already been fixed.  I feel like I looked at a report like this earlier this year.

Process:         Safari [76543]
Path:            /Applications/Safari.app/Contents/MacOS/Safari
Identifier:      com.apple.Safari
Version:         4 Developer Preview (5526.11.2)
Build Info:      WebBrowser-55261102~10
Code Type:       X86 (Native)
Parent Process:  launchd [304]

Date/Time:       2008-09-05 15:21:58.425 -0700
OS Version:      Mac OS X 10.5.4 (9E17)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
Crashed Thread:  0

Thread 0 Crashed:
0   com.apple.WebCore             	0x91c761bd WebCore::InsertNodeBeforeCommand::doUnapply() + 29
1   com.apple.WebCore             	0x91c75c19 WebCore::EditCommand::unapply() + 57
2   com.apple.WebCore             	0x91c75cf5 WebCore::CompositeEditCommand::doUnapply() + 85
3   com.apple.WebCore             	0x91c75c19 WebCore::EditCommand::unapply() + 57
4   com.apple.WebCore             	0x91c75cf5 WebCore::CompositeEditCommand::doUnapply() + 85
5   com.apple.WebCore             	0x91c75c19 WebCore::EditCommand::unapply() + 57
6   com.apple.Foundation          	0x92595102 -[_NSUndoLightInvocation invoke] + 34
7   com.apple.Foundation          	0x92582be4 -[_NSUndoStack popAndInvoke] + 244
8   com.apple.Foundation          	0x925829e7 -[NSUndoManager undoNestedGroup] + 199
9   com.apple.AppKit              	0x9611fc23 -[NSApplication sendAction:to:from:] + 112
10  com.apple.Safari              	0x0002afd8 0x1000 + 171992
11  com.apple.AppKit              	0x961ce660 -[NSMenu performActionForItemAtIndex:] + 493
12  com.apple.AppKit              	0x961ce365 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 220
13  com.apple.AppKit              	0x961cdfeb -[NSMenu performKeyEquivalent:] + 866
14  com.apple.AppKit              	0x961cc890 -[NSApplication _handleKeyEquivalent:] + 492
15  com.apple.AppKit              	0x960e9853 -[NSApplication sendEvent:] + 3999
16  com.apple.Safari              	0x00029250 0x1000 + 164432
17  com.apple.AppKit              	0x96046e27 -[NSApplication run] + 847
18  com.apple.AppKit              	0x96014030 NSApplicationMain + 574
19  com.apple.Safari              	0x000b4de6 0x1000 + 736742

Thread 1:
0   libSystem.B.dylib             	0x90e4c68e __semwait_signal + 10
1   libSystem.B.dylib             	0x90e7736d pthread_cond_wait$UNIX2003 + 73
2   com.apple.WebCore             	0x9199c1ff WebCore::IconDatabase::syncThreadMainLoop() + 239
3   com.apple.WebCore             	0x91955df5 WebCore::IconDatabase::iconDatabaseSyncThread() + 181
4   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
5   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 2:
0   libSystem.B.dylib             	0x90e4c68e __semwait_signal + 10
1   libSystem.B.dylib             	0x90e7736d pthread_cond_wait$UNIX2003 + 73
2   com.apple.WebCore             	0x91fd9bdb WebCore::LocalStorageThread::localStorageThread() + 427
3   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
4   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 3:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54cf8 CFRunLoopRunInMode + 88
4   com.apple.CFNetwork           	0x95c84a32 CFURLCacheWorkerThread(void*) + 396
5   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
6   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 4:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54cf8 CFRunLoopRunInMode + 88
4   com.apple.Foundation          	0x92514460 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 320
5   com.apple.Foundation          	0x924b0f1d -[NSThread main] + 45
6   com.apple.Foundation          	0x924b0ac4 __NSThread__main__ + 308
7   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
8   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 5:
0   libSystem.B.dylib             	0x90e955e2 select$DARWIN_EXTSN + 10
1   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
2   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 6:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54cf8 CFRunLoopRunInMode + 88
4   com.apple.audio.CoreAudio     	0x970ec464 HALRunLoop::OwnThread(void*) + 160
5   com.apple.audio.CoreAudio     	0x970ec300 CAPThread::Entry(CAPThread*) + 96
6   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
7   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 7:
0   libSystem.B.dylib             	0x90e4c68e __semwait_signal + 10
1   libSystem.B.dylib             	0x90e7736d pthread_cond_wait$UNIX2003 + 73
2   com.apple.ColorSync           	0x95315460 pthreadSemaphoreWait(t_pthreadSemaphore*) + 42
3   com.apple.ColorSync           	0x95327d92 CMMConvTask(void*) + 54
4   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
5   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 8:
0   libSystem.B.dylib             	0x90eaf07a __workq_ops + 10
1   libSystem.B.dylib             	0x90eaf0aa start_wqthread + 30

Thread 9:

Thread 10:
0   libSystem.B.dylib             	0x90e45506 semaphore_timedwait_signal_trap + 10
1   libSystem.B.dylib             	0x90e7784f _pthread_cond_wait + 1244
2   libSystem.B.dylib             	0x90e790d3 pthread_cond_timedwait_relative_np + 47
3   com.apple.Foundation          	0x924f6e8c -[NSCondition waitUntilDate:] + 236
4   com.apple.Foundation          	0x924f6ca0 -[NSConditionLock lockWhenCondition:beforeDate:] + 144
5   com.apple.Foundation          	0x924f6c05 -[NSConditionLock lockWhenCondition:] + 69
6   com.apple.AppKit              	0x960b4470 -[NSUIHeartBeat _heartBeatThread:] + 753
7   com.apple.Foundation          	0x924b0f1d -[NSThread main] + 45
8   com.apple.Foundation          	0x924b0ac4 __NSThread__main__ + 308
9   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
10  libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 11:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54d54 CFRunLoopRun + 84
4   com.apple.QuickTime           	0x94dc3dc3 QTSNetworkThread_RunThread + 131
5   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
6   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 12:
0   libSystem.B.dylib             	0x90e4c68e __semwait_signal + 10
1   libSystem.B.dylib             	0x90e7736d pthread_cond_wait$UNIX2003 + 73
2   libGLProgrammability.dylib    	0x90064432 glvmDoWork + 162
3   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
4   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 13:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   ...romedia.Flash Player.plugin	0x18fb9959 memcopy_mmx + 709497
3   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
4   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 14:
0   libSystem.B.dylib             	0x90e454ee semaphore_wait_signal_trap + 10
1   libSystem.B.dylib             	0x90e77866 _pthread_cond_wait + 1267
2   libSystem.B.dylib             	0x90ebd371 pthread_cond_wait + 48
3   ...romedia.Flash Player.plugin	0x18e80928 0x18aee000 + 3746088
4   ...romedia.Flash Player.plugin	0x18eb8230 Flash_EnforceLocalSecurity + 125000
5   ...romedia.Flash Player.plugin	0x18e80bd2 0x18aee000 + 3746770
6   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
7   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 15:
0   libSystem.B.dylib             	0x90e454ee semaphore_wait_signal_trap + 10
1   libSystem.B.dylib             	0x90e77866 _pthread_cond_wait + 1267
2   libSystem.B.dylib             	0x90ebd371 pthread_cond_wait + 48
3   ...romedia.Flash Player.plugin	0x18e80928 0x18aee000 + 3746088
4   ...romedia.Flash Player.plugin	0x18eb8230 Flash_EnforceLocalSecurity + 125000
5   ...romedia.Flash Player.plugin	0x18e80bd2 0x18aee000 + 3746770
6   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
7   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 16:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54d54 CFRunLoopRun + 84
4   com.apple.DesktopServices     	0x91088ea3 TSystemNotificationTask::SystemNotificationTaskProc(void*) + 123
5   ...ple.CoreServices.CarbonCore	0x9154b55b PrivateMPEntryPoint + 56
6   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
7   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 17:
0   libSystem.B.dylib             	0x90e454a6 mach_msg_trap + 10
1   libSystem.B.dylib             	0x90e4cc9c mach_msg + 72
2   com.apple.CoreFoundation      	0x94a540ce CFRunLoopRunSpecific + 1790
3   com.apple.CoreFoundation      	0x94a54d54 CFRunLoopRun + 84
4   com.apple.DesktopServices     	0x9108901c TFSEventsNotificationTask::FSEventsNotificationTaskProc(void*) + 216
5   ...ple.CoreServices.CarbonCore	0x9154b55b PrivateMPEntryPoint + 56
6   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
7   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 18:
0   libSystem.B.dylib             	0x90e4c68e __semwait_signal + 10
1   libSystem.B.dylib             	0x90e7736d pthread_cond_wait$UNIX2003 + 73
2   ...ple.CoreServices.CarbonCore	0x9154d347 TSWaitOnCondition + 126
3   ...ple.CoreServices.CarbonCore	0x9152c2d2 TSWaitOnConditionTimedRelative + 202
4   ...ple.CoreServices.CarbonCore	0x9154cfc4 MPWaitOnQueue + 208
5   com.apple.DesktopServices     	0x91093fda TNodeSyncTask::SyncTaskProc(void*) + 84
6   ...ple.CoreServices.CarbonCore	0x9154b55b PrivateMPEntryPoint + 56
7   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
8   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 19:
0   libSystem.B.dylib             	0x90e75f66 kevent + 10
1   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
2   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 20:
0   libSystem.B.dylib             	0x90e45506 semaphore_timedwait_signal_trap + 10
1   libSystem.B.dylib             	0x90e7784f _pthread_cond_wait + 1244
2   libSystem.B.dylib             	0x90e790d3 pthread_cond_timedwait_relative_np + 47
3   com.apple.audio.CoreAudio     	0x970fba47 CAGuard::WaitFor(unsigned long long) + 213
4   com.apple.audio.CoreAudio     	0x970fd602 CAGuard::WaitUntil(unsigned long long) + 70
5   com.apple.audio.CoreAudio     	0x970fbda7 HP_IOThread::WorkLoop() + 759
6   com.apple.audio.CoreAudio     	0x970fbaab HP_IOThread::ThreadEntry(HP_IOThread*) + 17
7   com.apple.audio.CoreAudio     	0x970ec300 CAPThread::Entry(CAPThread*) + 96
8   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
9   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 21:
0   libSystem.B.dylib             	0x90e45506 semaphore_timedwait_signal_trap + 10
1   libSystem.B.dylib             	0x90e7784f _pthread_cond_wait + 1244
2   libSystem.B.dylib             	0x90e790d3 pthread_cond_timedwait_relative_np + 47
3   ...ple.CoreServices.CarbonCore	0x9152c2fe TSWaitOnConditionTimedRelative + 246
4   ...ple.CoreServices.CarbonCore	0x9154cfc4 MPWaitOnQueue + 208
5   com.apple.DesktopServices     	0x91095f24 TFolderSizeTask::FolderSizeTaskProc(void*) + 104
6   ...ple.CoreServices.CarbonCore	0x9154b55b PrivateMPEntryPoint + 56
7   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
8   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 22:
0   libSystem.B.dylib             	0x90e45506 semaphore_timedwait_signal_trap + 10
1   libSystem.B.dylib             	0x90e7784f _pthread_cond_wait + 1244
2   libSystem.B.dylib             	0x90e790d3 pthread_cond_timedwait_relative_np + 47
3   ...ple.CoreServices.CarbonCore	0x9152c2fe TSWaitOnConditionTimedRelative + 246
4   ...ple.CoreServices.CarbonCore	0x9154cfc4 MPWaitOnQueue + 208
5   com.apple.DesktopServices     	0x91095f24 TFolderSizeTask::FolderSizeTaskProc(void*) + 104
6   ...ple.CoreServices.CarbonCore	0x9154b55b PrivateMPEntryPoint + 56
7   libSystem.B.dylib             	0x90e766f5 _pthread_start + 321
8   libSystem.B.dylib             	0x90e765b2 thread_start + 34

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0xbffff28c  ebx: 0x92582b01  ecx: 0x2590d480  edx: 0x00000000
  edi: 0x2590d480  esi: 0x1ac777a0  ebp: 0xbffff298  esp: 0xbffff270
   ss: 0x0000001f  efl: 0x00010282  eip: 0x91c761bd   cs: 0x00000017
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
  cr2: 0x00000000

Binary Images:
    0x1000 -   0x140fe1  com.apple.Safari 4 Developer Preview (5526.11.2) &lt;3bcf4f3ca3c0349e26db30a14658e525&gt; /Applications/Safari.app/Contents/MacOS/Safari
  0x18a000 -   0x199ff8  SyndicationUI ??? (???) &lt;f44522033c6fa93f5b0890b2e58a85b1&gt; /System/Library/PrivateFrameworks/SyndicationUI.framework/Versions/A/SyndicationUI
  0x570000 -   0x68eff7  com.apple.RawCamera.bundle 2.0.8 (2.0.8) &lt;56067945130800a348eb076676d41e92&gt; /System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera
0x13f86000 - 0x13f89fff  com.apple.audio.AudioIPCPlugIn 1.0.4 (1.0.4) &lt;9ce6f675ce724b0ba4e78323b79cf95c&gt; /System/Library/Extensions/AudioIPCDriver.kext/Contents/Resources/AudioIPCPlugIn.bundle/Contents/MacOS/AudioIPCPlugIn
0x13f97000 - 0x13f9cfff  com.apple.audio.AppleHDAHALPlugIn 1.5.7 (1.5.7a24) /System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAHALPlugIn.bundle/Contents/MacOS/AppleHDAHALPlugIn
0x14183000 - 0x14184ffc  com.apple.JavaPluginCocoa 12.1.0 (12.1.0) &lt;d21a12c5668d4d89bfe492a5223a75cc&gt; /Library/Internet Plug-Ins/JavaPluginCocoa.bundle/Contents/MacOS/JavaPluginCocoa
0x1418a000 - 0x1418fffd  com.apple.JavaVM 12.1.0 (12.1.0) &lt;25c546c36e5bed978579d281080ab4c8&gt; /System/Library/Frameworks/JavaVM.framework/Versions/A/JavaVM
0x14762000 - 0x14763ff3  ATSHI.dylib ??? (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/ATSHI.dylib
0x14f39000 - 0x14f3eff3  libCGXCoreImage.A.dylib ??? (???) &lt;32265ec157db98a33c5dcf0e6687dec2&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCGXCoreImage.A.dylib
0x16093000 - 0x16098fff  com.apple.DictionaryServiceComponent 1.1 (1.1) &lt;8edc1180f52db18e9ddfb4e95debe61b&gt; /System/Library/Components/DictionaryService.component/Contents/MacOS/DictionaryService
0x165f0000 - 0x16661fff +com.DivXInc.DivXDecoder 6.4.0 (6.4.0) /Library/QuickTime/DivX Decoder.component/Contents/MacOS/DivX Decoder
0x166fb000 - 0x166fbffd  liblangid.dylib ??? (???) &lt;4310e568d617f1ce7178266630e1b71a&gt; /usr/lib/liblangid.dylib
0x173a0000 - 0x173a1fff +com.google.GoogleNotifierQuickAddCMPlugin 1.9.100 (1.9.100.0) /Users/eseidel/Library/Contextual Menu Items/Google Notifier Quick Add CM Plugin.plugin/Contents/MacOS/Google Notifier Quick Add CM Plugin
0x189e0000 - 0x189e2ffe  com.apple.AutomatorCMM 1.1 (160) &lt;650079fd95a57e8131e79409a00b2aed&gt; /System/Library/Contextual Menu Items/AutomatorCMM.plugin/Contents/MacOS/AutomatorCMM
0x18aee000 - 0x190eeffb +com.macromedia.Flash Player.plugin 9.0.124.0 (1.0.4f60) &lt;8355dcf076564b6784c517fd0eccb2f2&gt; /Library/Internet Plug-Ins/Flash Player.plugin/Contents/MacOS/Flash Player
0x19226000 - 0x19245fed  com.apple.audio.CoreAudioKit 1.5 (1.5) &lt;82f2e52c502db7f3b32349a54209a0fe&gt; /System/Library/Frameworks/CoreAudioKit.framework/Versions/A/CoreAudioKit
0x1b5d6000 - 0x1b5d7ffd  com.apple.BluetoothMenu 2.1 (2.1f17) /System/Library/Contextual Menu Items/BluetoothContextualMenu.plugin/Contents/MacOS/BluetoothContextualMenu
0x1b795000 - 0x1b798fff  com.apple.BezelServicesFW 1.4.832 (1.4.832) /System/Library/PrivateFrameworks/BezelServices.framework/Versions/A/BezelServices
0x1c1bf000 - 0x1c1cdfeb  libSimplifiedChineseConverter.dylib ??? (???) &lt;548d5a699dbe2bb8fcc8275321fdc0d4&gt; /System/Library/CoreServices/Encodings/libSimplifiedChineseConverter.dylib
0x1c1d2000 - 0x1c1e4fff  libTraditionalChineseConverter.dylib ??? (???) &lt;89ec94121ef50601dc538548caae57fc&gt; /System/Library/CoreServices/Encodings/libTraditionalChineseConverter.dylib
0x1ed33000 - 0x1ed38fff  com.apple.FolderActionsMenu 1.3.2 (1.3.2) &lt;9ba69ef0bec96264a79fa28b3a5f058b&gt; /System/Library/Contextual Menu Items/FolderActionsMenu.plugin/Contents/MacOS/FolderActionsMenu
0x1f751000 - 0x1f756fff  libFontStreams.A.dylib ??? (???) &lt;9c67b56cb4bdd358622a4bb0aa51e119&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libFontStreams.A.dylib
0x22c15000 - 0x22d3cfe7  libmecab.1.0.0.dylib ??? (???) &lt;7b38ea21924f2d04b3aa6c75b0ddcb29&gt; /usr/lib/libmecab.1.0.0.dylib
0x266e6000 - 0x266f0ffe  com.apple.URLMount 3.1.1 (3.1.1) &lt;b4018e683fad4259ee78070e91f35029&gt; /System/Library/PrivateFrameworks/URLMount.framework/URLMount
0x272d2000 - 0x272d4ffb  com.apple.PDFImporter 1.7 (???) &lt;490de796fe9a6b3b8a9844a1630d38e2&gt; /System/Library/Components/PDFImporter.component/Contents/MacOS/PDFImporter
0x295c0000 - 0x2962eff7  com.apple.Bluetooth 2.1 (2.1f17) &lt;29ab5843bb608c155d4d7353320c2194&gt; /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth
0x296c2000 - 0x296deff7  GLRendererFloat ??? (???) &lt;98be9cb44eb018fa6300e9447b214fd7&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLRendererFloat.bundle/GLRendererFloat
0x296e4000 - 0x296f3fff  com.apple.quicktime.webplugin 7.5 (861) /Library/Internet Plug-Ins/QuickTime Plugin.webplugin/Contents/MacOS/QuickTime Plugin
0x2dbdb000 - 0x2dd91ff3  com.apple.audio.codecs.Components 1.6.3 (1.6.3) /System/Library/Components/AudioCodecs.component/Contents/MacOS/AudioCodecs
0x2dee9000 - 0x2df03fe3  com.apple.applepixletvideo 1.2.16 (1.2d16) &lt;798930d46fb63202d054bbabf6e8c0e6&gt; /System/Library/QuickTime/ApplePixletVideo.component/Contents/MacOS/ApplePixletVideo
0x2dff6000 - 0x2e031fff  com.apple.QuickTimeFireWireDV.component 7.5 (861) /System/Library/QuickTime/QuickTimeFireWireDV.component/Contents/MacOS/QuickTimeFireWireDV
0x2e086000 - 0x2e0b5ffe  com.apple.QuickTime Plugin.plugin 7.5 (861) /Library/Internet Plug-Ins/QuickTime Plugin.plugin/Contents/MacOS/QuickTime Plugin
0x2e0c7000 - 0x2e2baff7 +net.telestream.wmv.import 2.1.0.33 (2.1.0.33) /Library/QuickTime/Flip4Mac WMV Import.component/Contents/MacOS/Flip4Mac WMV Import
0x2e2ea000 - 0x2e44afe1  com.apple.QuickTimeStreaming.component 7.5 (861) &lt;9821ed1667fb46135773f41354008671&gt; /System/Library/QuickTime/QuickTimeStreaming.component/Contents/MacOS/QuickTimeStreaming
0x2e59a000 - 0x2e71cfef  GLEngine ??? (???) &lt;e9b3c93e50e3236cae43a2161e331720&gt; /System/Library/Frameworks/OpenGL.framework/Resources/GLEngine.bundle/GLEngine
0x2e74a000 - 0x2e9d2fe1  com.apple.ATIRadeonX1000GLDriver 1.5.28 (5.2.8) &lt;908a996049d30efc4da606661969ec18&gt; /System/Library/Extensions/ATIRadeonX1000GLDriver.bundle/Contents/MacOS/ATIRadeonX1000GLDriver
0x2fab3000 - 0x2fec5fe9  QuickTimeH264.scalar ??? (???) &lt;105e559b7b4dfc73d3db057fa6b5a009&gt; /System/Library/QuickTime/QuickTimeH264.component/Contents/Resources/QuickTimeH264.scalar
0x2ff27000 - 0x2ff99fff  com.apple.iLifeMediaBrowser 1.0.8 (212) &lt;afa1e1cb24dab8802261493e84692570&gt; /System/Library/PrivateFrameworks/iLifeMediaBrowser.framework/Versions/A/iLifeMediaBrowser
0x30888000 - 0x308a4fe7  libPDFRIP.A.dylib ??? (???) &lt;804fa9fc9690fe05251feb8eab1fdca8&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libPDFRIP.A.dylib
0x70000000 - 0x700e3ff2  com.apple.audio.units.Components 1.5.1 (1.5.1) /System/Library/Components/CoreAudio.component/Contents/MacOS/CoreAudio
0x8fe00000 - 0x8fe2da53  dyld 96.2 (???) &lt;7af47d3b00b2268947563c7fa8c59a07&gt; /usr/lib/dyld
0x9003d000 - 0x90510ffe  libGLProgrammability.dylib ??? (???) &lt;475db64244e011cd8811e076035b2632&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLProgrammability.dylib
0x90511000 - 0x90539fff  libcups.2.dylib ??? (???) &lt;ece20dff2a2c8ed3ae6ef735ef440c37&gt; /usr/lib/libcups.2.dylib
0x9053a000 - 0x905cdfff  com.apple.ink.framework 101.3 (86) &lt;bf3fa8927b4b8baae92381a976fd2079&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
0x905ce000 - 0x90605fff  com.apple.SystemConfiguration 1.9.2 (1.9.2) &lt;8b26ebf26a009a098484f1ed01ec499c&gt; /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
0x90606000 - 0x906e5fff  libobjc.A.dylib ??? (???) &lt;a53206274b6c2d42691f677863f379ae&gt; /usr/lib/libobjc.A.dylib
0x906e6000 - 0x906e8fff  com.apple.securityhi 3.0 (30817) &lt;2b2854123fed609d1820d2779e2e0963&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
0x906ef000 - 0x9071afe7  libauto.dylib ??? (???) &lt;42d8422dc23a18071869fdf7b5d8fab5&gt; /usr/lib/libauto.dylib
0x9071b000 - 0x907cbfff  edu.mit.Kerberos 6.0.12 (6.0.12) &lt;1dc515ebe407292db8e603938c72d4e8&gt; /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
0x907cc000 - 0x907cefff  com.apple.CrashReporterSupport 10.5.0 (156) &lt;3088b785b10d03504ed02f3fee5d3aab&gt; /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
0x907cf000 - 0x9081fff7  com.apple.HIServices 1.7.0 (???) &lt;f7e78891a6d08265c83dca8e378be1ea&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
0x90820000 - 0x908c7feb  com.apple.QD 3.11.52 (???) &lt;c72bd7bd2ce12694c3640a731d1ad878&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
0x908c8000 - 0x908cffff  com.apple.agl 3.0.9 (AGL-3.0.9) &lt;7dac4a7cb0de2f6d08ae71c1249379e3&gt; /System/Library/Frameworks/AGL.framework/Versions/A/AGL
0x908d0000 - 0x90972ff3  com.apple.QuickTimeImporters.component 7.5 (861) /System/Library/QuickTime/QuickTimeImporters.component/Contents/MacOS/QuickTimeImporters
0x90973000 - 0x90987ff3  com.apple.ImageCapture 4.0 (5.0.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
0x90988000 - 0x90988ffe  com.apple.quartzframework 1.5 (1.5) &lt;4b8f505e32e4f2d67967a276401f9aaf&gt; /System/Library/Frameworks/Quartz.framework/Versions/A/Quartz
0x90989000 - 0x90d99fef  libBLAS.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
0x90de9000 - 0x90e43ff7  com.apple.CoreText 2.0.2 (???) &lt;9fde11f84a72e890bbf2aa8b0b13b79a&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreText.framework/Versions/A/CoreText
0x90e44000 - 0x90fa4ff3  libSystem.B.dylib ??? (???) &lt;a12f397abf2285077b89bd726bff5b18&gt; /usr/lib/libSystem.B.dylib
0x90fa5000 - 0x91086ff7  libxml2.2.dylib ??? (???) &lt;de34eb9b43eb7d4a4e0b7f25529efa12&gt; /usr/lib/libxml2.2.dylib
0x91087000 - 0x91111fe3  com.apple.DesktopServices 1.4.6 (1.4.6) &lt;94d1a28b351b7dff77becadab0967772&gt; /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
0x91112000 - 0x9114bffe  com.apple.securityfoundation 3.0 (32989) &lt;e9171eda22c69c884a04a001aeb526e0&gt; /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
0x9114c000 - 0x9116afff  libresolv.9.dylib ??? (???) &lt;0629b6dcd71f4aac6a891cbe26253e85&gt; /usr/lib/libresolv.9.dylib
0x9116b000 - 0x91501fff  com.apple.QuartzCore 1.5.3 (1.5.3) &lt;1b65c05f89e81a499302fd63295b242d&gt; /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
0x91502000 - 0x917dcff3  com.apple.CoreServices.CarbonCore 786.4 (786.4) &lt;059c4803a7a95e3c1a95a332baeb1edf&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
0x917dd000 - 0x9181ffef  com.apple.NavigationServices 3.5.2 (163) &lt;91844980804067b07a0b6124310d3f31&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/NavigationServices.framework/Versions/A/NavigationServices
0x91820000 - 0x91820ffb  com.apple.installserver.framework 1.0 (8) /System/Library/PrivateFrameworks/InstallServer.framework/Versions/A/InstallServer
0x91821000 - 0x91821ffd  com.apple.vecLib 3.4.2 (vecLib 3.4.2) /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
0x91836000 - 0x91836ff8  com.apple.Cocoa 6.5 (???) &lt;e064f94d969ce25cb7de3cfb980c3249&gt; /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
0x91837000 - 0x91876fef  libTIFF.dylib ??? (???) &lt;6d0f80e9d4d81f3f64c876aca005bd53&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
0x91877000 - 0x9190aff3  com.apple.ApplicationServices.ATS 3.3 (???) &lt;064eb6d96417afa38a80b1735c4113aa&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
0x91950000 - 0x91952ff5  libRadiance.dylib ??? (???) &lt;20eadb285da83df96c795c2c5fa20590&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
0x91953000 - 0x9209dfff  com.apple.WebCore 5526.11 (5526.11) &lt;92070a47a097cbc0df1dde4d4071fa0a&gt; /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/WebCore
0x920ef000 - 0x92119fff  com.apple.CoreMediaPrivate 9.0 (9.0) &lt;8eb20bcfecc950600aa62dfa07aa47f3&gt; /System/Library/PrivateFrameworks/CoreMediaPrivate.framework/Versions/A/CoreMediaPrivate
0x9211a000 - 0x9211dfff  com.apple.help 1.1 (36) &lt;b507b08e484cb89033e9cf23062d77de&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
0x9211e000 - 0x92214ff7  com.apple.JavaScriptCore 5526.11 (5526.11) &lt;a635620d1ede7c6917bd6a66b9987484&gt; /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore
0x92215000 - 0x922e8fef  com.apple.QuickTimeH264.component 7.5 (861) /System/Library/QuickTime/QuickTimeH264.component/Contents/MacOS/QuickTimeH264
0x9244a000 - 0x92454feb  com.apple.audio.SoundManager 3.9.2 (3.9.2) &lt;0f2ba6e891d3761212cf5a5e6134d683&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CarbonSound.framework/Versions/A/CarbonSound
0x92455000 - 0x9245cffe  libbsm.dylib ??? (???) &lt;d25c63378a5029648ffd4b4669be31bf&gt; /usr/lib/libbsm.dylib
0x9245d000 - 0x92462ffb  com.apple.DisplayServicesFW 2.0 (2.0) &lt;8953865f53e940007a4e4ac5390d3c95&gt; /System/Library/PrivateFrameworks/DisplayServices.framework/Versions/A/DisplayServices
0x92463000 - 0x92472ffe  com.apple.DSObjCWrappers.Framework 1.2.1 (1.2.1) &lt;eac1c7b7c07ed3148c85934b6f656308&gt; /System/Library/PrivateFrameworks/DSObjCWrappers.framework/Versions/A/DSObjCWrappers
0x92473000 - 0x924a5fff  com.apple.LDAPFramework 1.4.3 (106) &lt;3a5c9df6032143cd6bc2658a9d328d8e&gt; /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
0x924a6000 - 0x92721fe7  com.apple.Foundation 6.5.5 (677.19) &lt;bfd4ebea1a7739dd6b523f15dca01a37&gt; /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
0x92722000 - 0x92dbefff  com.apple.CoreGraphics 1.351.31 (???) &lt;c97a42498636b2596764e48669f98e00&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
0x92dbf000 - 0x92e3cfef  libvMisc.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
0x92e3d000 - 0x92e42fff  com.apple.CommonPanels 1.2.4 (85) &lt;ea0665f57cd267609466ed8b2b20e893&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
0x92e43000 - 0x92e49fff  com.apple.print.framework.Print 218.0.2 (220.1) &lt;8bf7ef71216376d12fcd5ec17e43742c&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
0x92e4a000 - 0x92f6efe3  com.apple.audio.toolbox.AudioToolbox 1.5.1 (1.5.1) /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
0x92f6f000 - 0x9313dfff  com.apple.security 5.0.4 (34102) &lt;f01d6cbd6a0f24f6c13952ed448e77d6&gt; /System/Library/Frameworks/Security.framework/Versions/A/Security
0x9313e000 - 0x9318dfff  com.apple.QuickLookUIFramework 1.1 (170.4) /System/Library/PrivateFrameworks/QuickLookUI.framework/Versions/A/QuickLookUI
0x9318e000 - 0x93495ff7  com.apple.HIToolbox 1.5.3 (???) &lt;e36f5c553e5a32f64b7eb458dadadc71&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
0x93496000 - 0x93496ffe  com.apple.MonitorPanelFramework 1.2.0 (1.2.0) &lt;a2b462be6c51187eddf7d097ef0e0a04&gt; /System/Library/PrivateFrameworks/MonitorPanel.framework/Versions/A/MonitorPanel
0x93497000 - 0x934a2ff9  com.apple.helpdata 1.0 (14) /System/Library/PrivateFrameworks/HelpData.framework/Versions/A/HelpData
0x934a3000 - 0x934aefe7  libCSync.A.dylib ??? (???) &lt;8011fc1963cebdde0c6f101dbee5afd7&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCSync.A.dylib
0x9351d000 - 0x935a4ff7  libsqlite3.0.dylib ??? (???) &lt;6978bbcca4277d6ae9f042beff643f7d&gt; /usr/lib/libsqlite3.0.dylib
0x935a5000 - 0x935d4fe3  com.apple.AE 402.2 (402.2) &lt;e01596187e91af5d48653920017b8c8e&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
0x935d5000 - 0x93687ffb  libcrypto.0.9.7.dylib ??? (???) &lt;330b0e48e67faffc8c22dfc069ca7a47&gt; /usr/lib/libcrypto.0.9.7.dylib
0x93688000 - 0x9368cfff  libGIF.dylib ??? (???) &lt;d4234e6f5e5f530bdafb969157f1f17b&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
0x9368d000 - 0x947d2ff2  com.apple.QuickTimeComponents.component 7.5 (861) /System/Library/QuickTime/QuickTimeComponents.component/Contents/MacOS/QuickTimeComponents
0x94839000 - 0x9485dfff  libxslt.1.dylib ??? (???) &lt;4933ddc7f6618743197aadc85b33b5ab&gt; /usr/lib/libxslt.1.dylib
0x94868000 - 0x9486cfff  libmathCommon.A.dylib ??? (???) /usr/lib/system/libmathCommon.A.dylib
0x9486d000 - 0x94874fe9  libgcc_s.1.dylib ??? (???) &lt;f53c808e87d1184c0f9df63aef53ce0b&gt; /usr/lib/libgcc_s.1.dylib
0x94875000 - 0x948a2feb  libvDSP.dylib ??? (???) &lt;b232c018ddd040ec4e2c2af632dd497f&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
0x948a3000 - 0x94915fff  com.apple.PDFKit 2.1 (2.1) /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/PDFKit.framework/Versions/A/PDFKit
0x94916000 - 0x949e0fef  com.apple.WebKit 5526.11 (5526.11) &lt;e86d888c1926b248efea37192caeb22e&gt; /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit
0x949e1000 - 0x949e1ffd  com.apple.Accelerate.vecLib 3.4.2 (vecLib 3.4.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
0x949e2000 - 0x94b14fff  com.apple.CoreFoundation 6.5.3 (476.14) &lt;7ef7f5db09ff6dd0135a6165872803cc&gt; /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0x94b15000 - 0x94b24fff  libsasl2.2.dylib ??? (???) &lt;b9e1ca0b6612e280b6cbea6df0eec5f6&gt; /usr/lib/libsasl2.2.dylib
0x94b25000 - 0x94becff2  com.apple.vImage 3.0 (3.0) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
0x94bed000 - 0x94bedffa  com.apple.CoreServices 32 (32) &lt;2fcc8f3bd5bbfc000b476cad8e6a3dd2&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
0x94bee000 - 0x94beefff  com.apple.Carbon 136 (136) &lt;98a5e3bc0c4fa44bbb09713bb88707fe&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
0x94bef000 - 0x94d35ff7  com.apple.ImageIO.framework 2.0.2 (2.0.2) &lt;77dfee73f4c0d230425a5151ee0bce05&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
0x94d36000 - 0x94db0ff8  com.apple.print.framework.PrintCore 5.5.3 (245.3) &lt;222dade7b33b99708b8c09d1303f93fc&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
0x94db1000 - 0x950d2fea  com.apple.QuickTime 7.5.0 (861) &lt;4e1161b204b3b1f1047412c16483c39a&gt; /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime
0x950d3000 - 0x9528eff3  com.apple.QuartzComposer 2.1 (106.5) &lt;1a52b406a3f3d04387c822da4a93c245&gt; /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuartzComposer.framework/Versions/A/QuartzComposer
0x9528f000 - 0x952aaff3  libPng.dylib ??? (???) &lt;c0484bec6e2432b406755591924fe664&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
0x952ab000 - 0x952e1fef  libtidy.A.dylib ??? (???) &lt;f1d1742e06280444baa5637b209fd0af&gt; /usr/lib/libtidy.A.dylib
0x952e2000 - 0x953adfff  com.apple.ColorSync 4.5.0 (4.5.0) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
0x953bc000 - 0x95448ff7  com.apple.LaunchServices 289.2 (289.2) &lt;3577886e3a6d56ee3949850c4fde76c9&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
0x9553c000 - 0x95576fff  com.apple.coreui 1.1 (61) /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
0x95577000 - 0x955d3ff7  com.apple.htmlrendering 68 (1.1.3) &lt;fe87a9dede38db00e6c8949942c6bd4f&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HTMLRendering.framework/Versions/A/HTMLRendering
0x955d4000 - 0x95612ff7  libGLImage.dylib ??? (???) &lt;093b1b698ca93a0380f5fa262459ea28&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
0x95613000 - 0x95613ffd  com.apple.Accelerate 1.4.2 (Accelerate 1.4.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
0x9587d000 - 0x958d6ff7  libGLU.dylib ??? (???) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
0x958d7000 - 0x958effff  com.apple.openscripting 1.2.6 (???) &lt;b8e553df643f2aec68fa968b3b459b2b&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
0x958f0000 - 0x959b9fe7  com.apple.QuickTimeMPEG4.component 7.5 (861) /System/Library/QuickTime/QuickTimeMPEG4.component/Contents/MacOS/QuickTimeMPEG4
0x959f6000 - 0x95a27ffb  com.apple.quartzfilters 1.5.0 (1.5.0) &lt;22581f8fe9dd2cb261f97a897407ec3e&gt; /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuartzFilters.framework/Versions/A/QuartzFilters
0x95a28000 - 0x95a2fff7  libCGATS.A.dylib ??? (???) &lt;9b29a5500efe01cc3adea67bbc42568e&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCGATS.A.dylib
0x95a30000 - 0x95a3effd  libz.1.dylib ??? (???) &lt;5ddd8539ae2ebfd8e7cc1c57525385c7&gt; /usr/lib/libz.1.dylib
0x95a3f000 - 0x95b40fff  com.apple.PubSub 1.0.3 (65.3) /System/Library/Frameworks/PubSub.framework/Versions/A/PubSub
0x95b41000 - 0x95c78feb  com.apple.imageKit 1.0.1 (1.0) &lt;9b6da3210b7e69e75039cbb0fd4a8482&gt; /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/ImageKit.framework/Versions/A/ImageKit
0x95c79000 - 0x95cfbff3  com.apple.CFNetwork 330.4 (330.4) &lt;ce5b085df34a78b7f198aff9db5b52ec&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
0x95cfc000 - 0x95df0ff4  libiconv.2.dylib ??? (???) &lt;c508c60fafca17824c0017b2e4369802&gt; /usr/lib/libiconv.2.dylib
0x95df1000 - 0x95e07fe7  com.apple.CoreVideo 1.5.1 (1.5.1) &lt;ed7bb95fb94817ea3212090aac5c65f3&gt; /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
0x95e08000 - 0x95f40ff7  libicucore.A.dylib ??? (???) &lt;5031226ea28b371d8dfdbb32acfb48b5&gt; /usr/lib/libicucore.A.dylib
0x95f41000 - 0x95f60ffa  libJPEG.dylib ??? (???) &lt;0cfb80109d624beb9ceb3c43b6c5ec10&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
0x95f61000 - 0x95f65fff  com.apple.CoreMediaAuthoringPrivate 1.4 (1.4) /System/Library/PrivateFrameworks/CoreMediaAuthoringPrivate.framework/Versions/A/CoreMediaAuthoringPrivate
0x95f66000 - 0x95fa7fe7  libRIP.A.dylib ??? (???) &lt;c8d988d3880d7268468112c64c626d86&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib
0x95fa8000 - 0x95fb8ffc  com.apple.LangAnalysis 1.6.4 (1.6.4) &lt;8b7831b5f74a950a56cf2d22a2d436f6&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
0x95fb9000 - 0x95fb9ffc  com.apple.audio.units.AudioUnit 1.5 (1.5) /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
0x95fba000 - 0x95fcafff  com.apple.speech.synthesis.framework 3.7.1 (3.7.1) &lt;06d8fc0307314f8ffc16f206ad3dbf44&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
0x96008000 - 0x9600dfff  com.apple.backup.framework 1.0 (1.0) /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
0x9600e000 - 0x9680bfef  com.apple.AppKit 6.5.3 (949.33) &lt;84b236f43802f4c15011513d18efa101&gt; /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0x9680c000 - 0x96852fef  com.apple.Metadata 10.5.2 (398.18) &lt;adbb3a14e8f7da444e16d2fd61862771&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
0x96853000 - 0x96877feb  libssl.0.9.7.dylib ??? (???) &lt;acee7fc534674498dcac211318aa23e8&gt; /usr/lib/libssl.0.9.7.dylib
0x96878000 - 0x96881fff  com.apple.speech.recognition.framework 3.7.24 (3.7.24) &lt;d3180f9edbd9a5e6f283d6156aa3c602&gt; /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
0x96882000 - 0x968dfffb  libstdc++.6.dylib ??? (???) &lt;04b812dcec670daa8b7d2852ab14be60&gt; /usr/lib/libstdc++.6.dylib
0x968e0000 - 0x968ecfe7  com.apple.opengl 1.5.6 (1.5.6) &lt;125de77ea2434a91364e79a0905a7771&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
0x968fa000 - 0x96985fff  com.apple.framework.IOKit 1.5.1 (???) &lt;60cfc4b175c4ef60bb8e9036716a29f4&gt; /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x96986000 - 0x969a4ff3  com.apple.DirectoryService.Framework 3.5.4 (3.5.4) &lt;fe27e80e1a9e86403fd9ed16dcfe4e11&gt; /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService
0x969a5000 - 0x969adfff  com.apple.DiskArbitration 2.2.1 (2.2.1) &lt;75b0c8d8940a8a27816961dddcac8e0f&gt; /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
0x969ae000 - 0x969c4fff  com.apple.DictionaryServices 1.0.0 (1.0.0) &lt;ad0aa0252e3323d182e17f50defe56fc&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
0x96a38000 - 0x96bb7fff  com.apple.AddressBook.framework 4.1.1 (695) &lt;24a448ba4f9f784189bd3183e3474d81&gt; /System/Library/Frameworks/AddressBook.framework/Versions/A/AddressBook
0x96bb8000 - 0x96c37ff5  com.apple.SearchKit 1.2.0 (1.2.0) &lt;277b460da86bc222785159fe77e2e2ed&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
0x96c38000 - 0x96ff6fea  libLAPACK.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
0x96ff7000 - 0x9701fff7  com.apple.shortcut 1 (1.0) &lt;057783867138902b52bc0941fedb74d1&gt; /System/Library/PrivateFrameworks/Shortcut.framework/Versions/A/Shortcut
0x97020000 - 0x970ceffb  com.apple.QTKit 7.5 (861) /System/Library/Frameworks/QTKit.framework/Versions/A/QTKit
0x970cf000 - 0x9714bfeb  com.apple.audio.CoreAudio 3.1.0 (3.1) &lt;70bb7c657061631491029a61babe0b26&gt; /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
0x9714c000 - 0x97169ff7  com.apple.QuickLookFramework 1.1 (170.4) /System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook
0x9716a000 - 0x9716bffc  libffi.dylib ??? (???) &lt;a3b573eb950ca583290f7b2b4c486d09&gt; /usr/lib/libffi.dylib
0x9716c000 - 0x971aafff  com.apple.CoreMediaIOServicesPrivate 9.0 (9.0) /System/Library/PrivateFrameworks/CoreMediaIOServicesPrivate.framework/Versions/A/CoreMediaIOServicesPrivate
0x971ab000 - 0x971f5fe1  com.apple.securityinterface 3.0 (32532) &lt;f521dae416ce7a3bdd594b0d4e2fb517&gt; /System/Library/Frameworks/SecurityInterface.framework/Versions/A/SecurityInterface
0x971f6000 - 0x972b0fe3  com.apple.CoreServices.OSServices 226.5 (226.5) &lt;7e10d25c615a39fe1ab4d48e24a3b555&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
0x972b1000 - 0x97396ff3  com.apple.CoreData 100.1 (186) &lt;8e28162ef2288692615b52acc01f8b54&gt; /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
0x97397000 - 0x973b7ff2  libGL.dylib ??? (???) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
0x973b8000 - 0x973b8ff8  com.apple.ApplicationServices 34 (34) &lt;8f910fa65f01d401ad8d04cc933cf887&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
0x973b9000 - 0x9741fffb  com.apple.ISSupport 1.7 (38) /System/Library/PrivateFrameworks/ISSupport.framework/Versions/A/ISSupport
0xba900000 - 0xba916fff  libJapaneseConverter.dylib ??? (???) &lt;7b0248c392848338f5d6ed093313eeef&gt; /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib
0xbab00000 - 0xbab21fe2  libKoreanConverter.dylib ??? (???) &lt;51586b8d9ef39123fbe6918f12d8285f&gt; /System/Library/CoreServices/Encodings/libKoreanConverter.dylib
0xfffe8000 - 0xfffebfff  libobjc.A.dylib ??? (???) /usr/lib/libobjc.A.dylib
0xffff0000 - 0xffff1780  libSystem.B.dylib ??? (???) /usr/lib/libSystem.B.dylib</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90326</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-05 16:01:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/6201028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90327</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-05 16:02:59 -0700</bug_when>
    <thetext>This does not crash every time.  Might be fixed in ToT (I haven&apos;t gone searching yet).  But this is the second instance of this crash I&apos;ve had of this this week!  I&apos;ve sent both to Apple via CrashReporter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90610</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-08 17:39:17 -0700</bug_when>
    <thetext>I hit this all the time!  Bah.  Almost makes me want to use FireFox.  I think all you need to do is open a gmail reply and hit undo for this to crash Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90611</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-08 17:41:04 -0700</bug_when>
    <thetext>Double bah.  It&apos;s very easy to reproduce with internal Gmail.
1.  hit reply
2.  type something
3.  hit undo
4.  Safari crashes.

I&apos;m sure it&apos;s possible to hit this other ways too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90612</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-08 18:00:54 -0700</bug_when>
    <thetext>Tripple Bah!

This crashes Chrome too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90617</commentid>
    <comment_count>6</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2008-09-08 18:30:43 -0700</bug_when>
    <thetext>I&apos;ve had this one reported to me in Chrome for a while now, both in Gmail and Sites, always on an undo.  But no one has ever gotten a consistent repro.  Your repro case of just reply to email, type, and undo doesn&apos;t crash for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90623</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-09-08 21:02:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Double bah.  It&apos;s very easy to reproduce with internal Gmail.
&gt; 1.  hit reply
&gt; 2.  type something
&gt; 3.  hit undo
&gt; 4.  Safari crashes.

These steps don&apos;t reproduce a crash for me either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90624</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2008-09-08 21:21:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Double bah.  It&apos;s very easy to reproduce with internal Gmail.
&gt; 1.  hit reply
&gt; 2.  type something
&gt; 3.  hit undo
&gt; 4.  Safari crashes.

These steps hit the following ASSERT for me:
&lt;http://trac.webkit.org/browser/trunk/WebCore/editing/InsertNodeBeforeCommand.cpp#L59&gt;

ASSERTION FAILED: m_refChild-&gt;parentNode()
(/Users/matt/Code/WebKit/WebCore/editing/InsertNodeBeforeCommand.cpp:59 virtual void WebCore::InsertNodeBeforeCommand::doUnapply())

Thread 0 Crashed:
0   com.apple.WebCore             	0x03564f49 WebCore::InsertNodeBeforeCommand::doUnapply() + 235 (InsertNodeBeforeCommand.cpp:59)
1   com.apple.WebCore             	0x0341db09 WebCore::EditCommand::unapply() + 265 (EditCommand.cpp:127)
2   com.apple.WebCore             	0x032ecd7b WebCore::CompositeEditCommand::doUnapply() + 69 (CompositeEditCommand.cpp:80)
3   com.apple.WebCore             	0x0341db09 WebCore::EditCommand::unapply() + 265 (EditCommand.cpp:127)
4   com.apple.WebCore             	0x032ecd7b WebCore::CompositeEditCommand::doUnapply() + 69 (CompositeEditCommand.cpp:80)
5   com.apple.WebCore             	0x0341db09 WebCore::EditCommand::unapply() + 265 (EditCommand.cpp:127)
6   com.apple.WebKit              	0x001c34c0 -[WebEditorUndoTarget undoEditing:] + 166 (WebEditorClient.mm:150)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91139</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2008-09-14 14:55:12 -0700</bug_when>
    <thetext>Got some repro steps that seem to work reliably for me on Safari 3.1 Mac in Google Sites.

From http://code.google.com/p/chromium/issues/detail?id=2266

1. Create a new page
2. Type &apos;a&apos; into the text box. Press Ctrl-Z to undo the insertion of &apos;a&apos;, and the cursor is moved to the next line.
3. Move the cursor up to the beginning of the text box. Type &apos;a&apos; again.
Press Ctrl-Z to undo the insertion.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96757</commentid>
    <comment_count>10</comment_count>
    <who name="Sulka Haro">sulka</who>
    <bug_when>2008-10-27 12:57:06 -0700</bug_when>
    <thetext>I&apos;m getting this in a totally unrealiable manner, but my experience has been that the crash always follows when I try to undo an HTML-formatted paste into the editing window. My CrashReporter traces look different, too:

Process:         WebKit [9750]
Path:            /Applications/WebKit.app/Contents/MacOS/WebKit
Identifier:      org.webkit.nightly.WebKit
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  launchd [120]

Date/Time:       2008-05-27 11:39:51.759 +0300
OS Version:      Mac OS X 10.5.2 (9C7010)
Report Version:  6

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Application Specific Information:
*** Terminating app due to uncaught exception &apos;NSInternalInconsistencyException&apos;, reason: &apos;*** -[NSCFDictionary setObject:forKey:]: mutating method sent to immutable object&apos;

Thread 0 Crashed:
0   com.apple.CoreFoundation      	0x923370f4 ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ + 4
1   libobjc.A.dylib               	0x942e10fb objc_exception_throw + 40
2   com.apple.CoreFoundation      	0x9233702b +[NSException raise:format:arguments:] + 155
3   com.apple.CoreFoundation      	0x9233706a +[NSException raise:format:] + 58
4   com.apple.Foundation          	0x95bf0af4 -[NSCFDictionary setObject:forKey:] + 228
5   com.apple.CoreFoundation      	0x92335172 -[NSMutableDictionary addEntriesFromDictionary:] + 226
6   org.webkit.nightly.WebKit     	0x000026c7 start + 1979
7   org.webkit.nightly.WebKit     	0x00002008 start + 252
8   org.webkit.nightly.WebKit     	0x00001f35 start + 41

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0xa01ef0f0  ebx: 0x942e10dc  ecx: 0xa01ee1a0  edx: 0x00008000
  edi: 0x0011d200  esi: 0xa0780ab8  ebp: 0xbffff968  esp: 0xbffff968
   ss: 0x0000001f  efl: 0x00000286  eip: 0x923370f4   cs: 0x00000017
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
  cr2: 0x55824000
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103160</commentid>
    <comment_count>11</comment_count>
      <attachid>26196</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-22 00:20:53 -0800</bug_when>
    <thetext>Created attachment 26196
patch

Here&apos;s the patch. Now we also need some regression tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103222</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-22 14:24:43 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I&apos;m getting this in a totally unrealiable manner, but my experience has been
&gt; that the crash always follows when I try to undo an HTML-formatted paste into
&gt; the editing window. My CrashReporter traces look different, too

This is a different bug. It needs a different bug report and steps to reproduce.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103232</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-22 15:21:14 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of 19703 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26196</attachid>
            <date>2008-12-22 00:20:53 -0800</date>
            <delta_ts>2008-12-22 00:20:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>RobustEditingPatch.txt</filename>
            <type>text/plain</type>
            <size>98677</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzOTQyNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03OTEsNyArNzkxLDcgQEAKIAkJNjU1MEI2QTYwOTlERjAyNzAwOTBE
NzgxIC8qIFRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1NTBCNjlDMDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2NTNGMkQwRDk3MjdEMjAwQ0E5NzIz
IC8qIFNWR0FsdEdseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTY1M0YyQTBEOTcyN0QyMDBDQTk3MjMgLyogU1ZHQWx0R2x5cGhF
bGVtZW50LmNwcCAqLzsgfTsKIAkJNjU2NTNGMkUwRDk3MjdEMjAwQ0E5NzIzIC8qIFNWR0FsdEds
eXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU2NTNGMkIwRDk3MjdEMjAwQ0E5NzIzIC8qIFNWR0FsdEdseXBoRWxlbWVudC5oICovOyB9
OwotCQk2NTY1ODBGNDA5RDEyQjIwMDAwRTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgwRUYwOUQxMkIy
MDAwMEU2MUQ3IC8qIENTU1Byb3BlcnR5TmFtZXMuaCAqLzsgfTsKKwkJNjU2NTgwRjQwOUQxMkIy
MDAwMEU2MUQ3IC8qIENTU1Byb3BlcnR5TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MEVGMDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9w
ZXJ0eU5hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNjU2NTgxNTEwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MTQ4MDlEMTMw
NDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRzLmggKi87IH07CiAJCTY1NjU4MUIyMDlEMTRF
RTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxQUUwOUQxNEVFNjAwMEU2MUQ3IC8qIFVz
ZXJBZ2VudFN0eWxlU2hlZXRzLmggKi87IH07CiAJCTY1NjU4MUZFMDlEMTUwOEQwMDBFNjFENyAv
KiBTVkdFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU2NTgxRTcwOUQxNTA4RDAwMEU2MUQ3IC8qIFNWR0VsZW1lbnRGYWN0b3J5
LmggKi87IH07CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsMzkgKzI1LDMzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJBcHBlbmROb2RlQ29tbWFuZC5oIgorCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNv
bW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBwYXJlbnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxk
VG9BcHBlbmQpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFuZChwYXJlbnROb2RlLT5kb2N1bWVudCgp
KSwgbV9wYXJlbnROb2RlKHBhcmVudE5vZGUpLCBtX2NoaWxkVG9BcHBlbmQoY2hpbGRUb0FwcGVu
ZCkKK0FwcGVuZE5vZGVDb21tYW5kOjpBcHBlbmROb2RlQ29tbWFuZChQYXNzUmVmUHRyPEVsZW1l
bnQ+IHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIDogU2ltcGxlRWRpdENvbW1h
bmQocGFyZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9u
b2RlKG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRUb0FwcGVuZCk7Ci0gICAgQVNTRVJUKG1f
cGFyZW50Tm9kZSk7CisgICAgQVNTRVJUKG1fcGFyZW50KTsKKyAgICBBU1NFUlQobV9ub2RlKTsK
KyAgICBBU1NFUlQoIW1fbm9kZS0+cGFyZW50KCkpOworCisgICAgQVNTRVJUKGVuY2xvc2luZ05v
ZGVPZlR5cGUoUG9zaXRpb24obV9wYXJlbnQuZ2V0KCksIDApLCBpc0NvbnRlbnRFZGl0YWJsZSkg
fHwgIW1fcGFyZW50LT5hdHRhY2hlZCgpKTsKIH0KIAogdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6
ZG9BcHBseSgpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRUb0FwcGVuZCk7Ci0gICAgQVNTRVJUKG1f
cGFyZW50Tm9kZSk7Ci0gICAgLy8gSWYgdGhlIGNoaWxkIHRvIGFwcGVuZCBpcyBhbHJlYWR5IGlu
IGEgdHJlZSwgYXBwZW5kaW5nIGl0IHdpbGwgcmVtb3ZlIGl0IGZyb20gaXQncyBvbGQgbG9jYXRp
b24KLSAgICAvLyBpbiBhbiBub24tdW5kb2FibGUgd2F5LiAgV2UgbWlnaHQgZXZlbnR1YWxseSBm
aW5kIGl0IHVzZWZ1bCB0byBkbyBhbiB1bmRvYWJsZSByZW1vdmUgaW4gdGhpcyBjYXNlLgotICAg
IEFTU0VSVCghbV9jaGlsZFRvQXBwZW5kLT5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKGVuY2xvc2lu
Z05vZGVPZlR5cGUoUG9zaXRpb24obV9wYXJlbnROb2RlLmdldCgpLCAwKSwgJmlzQ29udGVudEVk
aXRhYmxlKSB8fCAhbV9wYXJlbnROb2RlLT5hdHRhY2hlZCgpKTsKLQotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIG1fcGFyZW50Tm9kZS0+YXBwZW5kQ2hpbGQobV9jaGlsZFRvQXBwZW5k
LmdldCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CisgICAgbV9wYXJlbnQtPmFwcGVuZENoaWxkKG1fbm9kZS5nZXQoKSwgZWMpOwogfQogCiB2b2lk
IEFwcGVuZE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEFTU0VSVChtX2NoaWxkVG9B
cHBlbmQpOwotICAgIEFTU0VSVChtX3BhcmVudE5vZGUpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgbV9wYXJlbnROb2RlLT5yZW1vdmVDaGlsZChtX2NoaWxkVG9BcHBlbmQuZ2V0
KCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICBtX25vZGUtPnJlbW92ZShlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNv
cmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOSAr
MzIsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcHBlbmROb2RlQ29tbWFuZCA6
IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXBwZW5kTm9kZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHBhcmVudE5vZGUs
IFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0FwcGVuZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cHBlbmROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gcGFyZW50LCBQYXNz
UmVmUHRyPE5vZGU+IG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFw
cGVuZE5vZGVDb21tYW5kKHBhcmVudE5vZGUsIGNoaWxkVG9BcHBlbmQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBcHBlbmROb2RlQ29tbWFuZChwYXJlbnQsIG5vZGUpKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgQXBwZW5kTm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBwYXJl
bnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9BcHBlbmQpOworICAgIEFwcGVuZE5vZGVD
b21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IG5vZGUp
OwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFw
cGx5KCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gbV9wYXJlbnROb2RlOwotICAgIFJlZlB0cjxOb2Rl
PiBtX2NoaWxkVG9BcHBlbmQ7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fcGFyZW50OworICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5NDI3KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3
LDcgKzMwNyw3IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKIHsK
IH0KIAotQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKEVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQorQXBwbHlTdHls
ZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwg
Ym9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21wb3Np
dGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV9zdHlsZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRp
dGluZ0FjdGlvbikKQEAgLTk5NSw3ICs5OTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVDU1NTdHlsZShDCiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7CisgICAgICAgIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQp
LmlkKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICAgICAgaWYgKHZhbHVlICYmIChwcm9wZXJ0eUlE
ICE9IENTU1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVtKSkpIHsKICAg
ICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KGRlY2wsIHByb3BlcnR5SUQpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxl
Q29tbWFuZChkb2N1bWVudCwgc3R5bGUsIHN0YXJ0LCBlbmQsIGFjdGlvbiwgbGV2ZWwpKTsKICAg
ICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNvbW1hbmQ+IGNyZWF0ZShFbGVt
ZW50KiBlbGVtZW50LCBib29sIHJlbW92ZU9ubHkgPSBmYWxzZSwgRWRpdEFjdGlvbiBhY3Rpb24g
PSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBs
eVN0eWxlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgYm9vbCBy
ZW1vdmVPbmx5ID0gZmFsc2UsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0
dHJpYnV0ZXMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVD
b21tYW5kKGVsZW1lbnQsIHJlbW92ZU9ubHksIGFjdGlvbikpOwogICAgIH0KQEAgLTU0LDcgKzU0
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCos
IENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZlbCk7CiAgICAg
QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uLCBFUHJvcGVy
dHlMZXZlbCk7Ci0gICAgQXBwbHlTdHlsZUNvbW1hbmQoRWxlbWVudCosIGJvb2wgcmVtb3ZlT25s
eSwgRWRpdEFjdGlvbik7CisgICAgQXBwbHlTdHlsZUNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50
PiwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0Fw
cGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsMjEgKzEwMiwyMSBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KICAgICAKICAgICAvLyBCdWlsZCB1cCBsaXN0IG9mIGFu
Y2VzdG9ycyBpbiBiZXR3ZWVuIHRoZSBzdGFydCBub2RlIGFuZCB0aGUgdG9wIGJsb2NrcXVvdGUu
Ci0gICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnM7ICAgIAotICAgIGZvciAoTm9kZSogbm9kZSA9
IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOyBub2RlICE9IHRvcEJsb2NrcXVvdGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpCisgICAgVmVjdG9yPEVsZW1lbnQqPiBhbmNlc3RvcnM7ICAgIAor
ICAgIGZvciAoRWxlbWVudCogbm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzdGFydE5vZGUt
PnBhcmVudE5vZGUoKSk7IG5vZGUgIT0gdG9wQmxvY2txdW90ZTsgbm9kZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlLT5wYXJlbnROb2RlKCkpKQogICAgICAgICBhbmNlc3RvcnMuYXBwZW5k
KG5vZGUpOwogICAgIAogICAgIC8vIEluc2VydCBhIGNsb25lIG9mIHRoZSB0b3AgYmxvY2txdW90
ZSBhZnRlciB0aGUgYnJlYWsuCi0gICAgUmVmUHRyPE5vZGU+IGNsb25lZEJsb2NrcXVvdGUgPSB0
b3BCbG9ja3F1b3RlLT5jbG9uZU5vZGUoZmFsc2UpOworICAgIFJlZlB0cjxFbGVtZW50PiBjbG9u
ZWRCbG9ja3F1b3RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFbGVtZW50Pih0b3BCbG9ja3F1b3Rl
LT5jbG9uZU5vZGUoZmFsc2UpKTsKICAgICBpbnNlcnROb2RlQWZ0ZXIoY2xvbmVkQmxvY2txdW90
ZS5nZXQoKSwgYnJlYWtOb2RlLmdldCgpKTsKICAgICAKICAgICAvLyBDbG9uZSBzdGFydE5vZGUn
cyBhbmNlc3RvcnMgaW50byB0aGUgY2xvbmVkIGJsb2NrcXVvdGUuCiAgICAgLy8gT24gZXhpdGlu
ZyB0aGlzIGxvb3AsIGNsb25lZEFuY2VzdG9yIGlzIHRoZSBsb3dlc3QgYW5jZXN0b3IKICAgICAv
LyB0aGF0IHdhcyBjbG9uZWQgKGkuZS4gdGhlIGNsb25lIG9mIGVpdGhlciBhbmNlc3RvcnMubGFz
dCgpCiAgICAgLy8gb3IgY2xvbmVkQmxvY2txdW90ZSBpZiBhbmNlc3RvcnMgaXMgZW1wdHkpLgot
ICAgIFJlZlB0cjxOb2RlPiBjbG9uZWRBbmNlc3RvciA9IGNsb25lZEJsb2NrcXVvdGU7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IGNsb25lZEFuY2VzdG9yID0gY2xvbmVkQmxvY2txdW90ZTsKICAgICBm
b3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaSAhPSAwOyAtLWkpIHsKLSAgICAgICAg
UmVmUHRyPE5vZGU+IGNsb25lZENoaWxkID0gYW5jZXN0b3JzW2kgLSAxXS0+Y2xvbmVOb2RlKGZh
bHNlKTsgLy8gc2hhbGxvdyBjbG9uZQorICAgICAgICBSZWZQdHI8RWxlbWVudD4gY2xvbmVkQ2hp
bGQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEVsZW1lbnQ+KGFuY2VzdG9yc1tpIC0gMV0tPmNsb25l
Tm9kZShmYWxzZSkpOyAvLyBzaGFsbG93IGNsb25lCiAgICAgICAgIC8vIFByZXNlcnZlIGxpc3Qg
aXRlbSBudW1iZXJpbmcgaW4gY2xvbmVkIGxpc3RzLgogICAgICAgICBpZiAoY2xvbmVkQ2hpbGQt
PmlzRWxlbWVudE5vZGUoKSAmJiBjbG9uZWRDaGlsZC0+aGFzVGFnTmFtZShvbFRhZykpIHsKICAg
ICAgICAgICAgIE5vZGUqIGxpc3RDaGlsZE5vZGUgPSBpID4gMSA/IGFuY2VzdG9yc1tpIC0gMl0g
OiBzdGFydE5vZGU7CkBAIC0xNTAsMTAgKzE1MCwxMCBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBUaGlzIGlzIHNvIHdlIGNhbiBjbG9uZSBhbmNl
c3RvcidzIHNpYmxpbmdzIGFuZCBwbGFjZSB0aGUgY2xvbmVzCiAgICAgICAgIC8vIGludG8gdGhl
IGNsb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuY2VzdG9yJ3MgcGFyZW50LgogICAgICAgICBO
b2RlKiBhbmNlc3RvcjsKLSAgICAgICAgTm9kZSogY2xvbmVkUGFyZW50OwotICAgICAgICBmb3Ig
KGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpcnN0KCksIGNsb25lZFBhcmVudCA9IGNsb25lZEFuY2Vz
dG9yLT5wYXJlbnROb2RlKCk7CisgICAgICAgIEVsZW1lbnQqIGNsb25lZFBhcmVudDsKKyAgICAg
ICAgZm9yIChhbmNlc3RvciA9IGFuY2VzdG9ycy5maXJzdCgpLCBjbG9uZWRQYXJlbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oY2xvbmVkQW5jZXN0b3ItPnBhcmVudE5vZGUoKSk7CiAgICAgICAg
ICAgICAgYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT0gdG9wQmxvY2txdW90ZTsKLSAgICAgICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCksIGNsb25lZFBhcmVudCA9IGNsb25l
ZFBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rv
ci0+cGFyZW50Tm9kZSgpLCBjbG9uZWRQYXJlbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY2xv
bmVkUGFyZW50LT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgICAgICBtb3ZlTm9kZSA9IGFuY2Vz
dG9yLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgd2hpbGUgKG1vdmVOb2RlKSB7CiAgICAg
ICAgICAgICAgICAgTm9kZSAqbmV4dCA9IG1vdmVOb2RlLT5uZXh0U2libGluZygpOwpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykK
KysrIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29t
bWFuZC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmgiCi0jaW5jbHVkZSAiUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCIKICNpbmNs
dWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIK
QEAgLTEwOCwxMiArMTA3LDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5
bGUoQ1MKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0eWxlLCBzdGFydCwgZW5kLCBlZGl0aW5nQWN0aW9uKSk7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGVkRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZWRFbGVtZW50KFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGZhbHNlKSk7CiB9CiAKLXZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFw
cGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSkpOwogfQpAQCAtMTI4LDI0ICsx
MjcsMjggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0TGluZUJyZQogICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZv
cmUoTm9kZSogaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQ
YXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkKQogewogICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1Rh
Z05hbWUoYm9keVRhZykpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydE5vZGVC
ZWZvcmVDb21tYW5kOjpjcmVhdGUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKSk7CiB9CiAKLXZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcihOb2RlKiBpbnNlcnRDaGlsZCwg
Tm9kZSogcmVmQ2hpbGQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0
ZXIoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGls
ZCkKIHsKKyAgICBBU1NFUlQoaW5zZXJ0Q2hpbGQpOworICAgIEFTU0VSVChyZWZDaGlsZCk7CiAg
ICAgQVNTRVJUKCFyZWZDaGlsZC0+aGFzVGFnTmFtZShib2R5VGFnKSk7Ci0gICAgaWYgKHJlZkNo
aWxkLT5wYXJlbnROb2RlKCktPmxhc3RDaGlsZCgpID09IHJlZkNoaWxkKQotICAgICAgICBhcHBl
bmROb2RlKGluc2VydENoaWxkLCByZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKKyAgICBFbGVtZW50
KiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7
CisgICAgQVNTRVJUKHBhcmVudCk7CisgICAgaWYgKHBhcmVudC0+bGFzdENoaWxkKCkgPT0gcmVm
Q2hpbGQpCisgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIHBhcmVudCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChyZWZDaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIGlu
c2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkLT5uZXh0U2libGluZygpKTsKICAg
ICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChOb2RlKiBp
bnNlcnRDaGlsZCwgY29uc3QgUG9zaXRpb24mIGVkaXRpbmdQb3NpdGlvbikKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxk
LCBjb25zdCBQb3NpdGlvbiYgZWRpdGluZ1Bvc2l0aW9uKQogewogICAgIEFTU0VSVChpc0VkaXRh
YmxlUG9zaXRpb24oZWRpdGluZ1Bvc2l0aW9uKSk7CiAgICAgLy8gRm9yIGVkaXRpbmcgcG9zaXRp
b25zIGxpa2UgW3RhYmxlLCAwXSwgaW5zZXJ0IGJlZm9yZSB0aGUgdGFibGUsCkBAIC0xNjEsNyAr
MTY0LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KAogICAgICAg
ICBpZiAoY2hpbGQpCiAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxkLCBj
aGlsZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQs
IHJlZkNoaWxkKTsKKyAgICAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihyZWZDaGlsZCkpOwogICAgIH0gZWxzZSBpZiAoY2FyZXRNaW5PZmZzZXQo
cmVmQ2hpbGQpID49IG9mZnNldCkgewogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENo
aWxkLCByZWZDaGlsZCk7CiAgICAgfSBlbHNlIGlmIChyZWZDaGlsZC0+aXNUZXh0Tm9kZSgpICYm
IGNhcmV0TWF4T2Zmc2V0KHJlZkNoaWxkKSA+IG9mZnNldCkgewpAQCAtMTcyLDM4ICsxNzUsMzkg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KAogICAgIH0KIH0KIAot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShOb2RlKiBuZXdDaGlsZCwgTm9k
ZSogcGFyZW50KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShQYXNzUmVm
UHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcGFyZW50KQogewotICAgIEFTU0VS
VChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHBhcmVudCkpOwotICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKEFwcGVuZE5vZGVDb21tYW5kOjpjcmVhdGUocGFyZW50LCBuZXdDaGlsZCkpOwor
ICAgIEFTU0VSVChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHBhcmVudC5nZXQoKSkpOworICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGVuZE5vZGVDb21tYW5kOjpjcmVhdGUocGFyZW50
LCBub2RlKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNoaWxkcmVu
SW5SYW5nZShOb2RlKiBub2RlLCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7Ci0gICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbm9k
ZS0+Y2hpbGROb2RlKGZyb20pOwotICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87IGkrKykg
ewotICAgICAgICBBU1NFUlQobm9kZVRvUmVtb3ZlKTsKLSAgICAgICAgTm9kZSogbmV4dCA9IG5v
ZGVUb1JlbW92ZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2RlVG9SZW1v
dmUpOwotICAgICAgICBub2RlVG9SZW1vdmUgPSBuZXh0OwotICAgIH0KKyAgICBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gY2hpbGRyZW47CisgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZE5vZGUo
ZnJvbSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyss
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChj
aGlsZCk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVtb3ZlTm9kZShjaGlsZHJlbltp
XS5yZWxlYXNlKCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2Rl
KE5vZGUqIHJlbW92ZUNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9k
ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
UmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShyZW1vdmVDaGlsZCkpOworICAgIGFwcGx5Q29tbWFu
ZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSkpOwogfQogCi12b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUq
IHJlbW92ZUNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiB7Ci0gICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmNyZWF0ZShy
ZW1vdmVDaGlsZCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUobm9kZSkpOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSogbm9kZSkKK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNz
UmVmUHRyPE5vZGU+IG5vZGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+IHBhcmVudCA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKICAgICByZW1vdmVOb2RlKG5vZGUpOwotICAgIHBydW5lKHBhcmVudCk7Cisg
ICAgcHJ1bmUocGFyZW50LnJlbGVhc2UoKSk7CiB9CiAKIHN0YXRpYyBib29sIGhhc0FSZW5kZXJl
ZERlc2NlbmRhbnQoTm9kZSogbm9kZSkKQEAgLTIzMSw0MiArMjM1LDQyIEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWYKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUoVGV4dCAqdGV4dCwgaW50IG9mZnNldCkKK3ZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2Rl
LCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSh0ZXh0LCBvZmZzZXQpKTsKKyAgICBhcHBseUNvbW1hbmRU
b0NvbXBvc2l0ZShTcGxpdFRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCkpOwog
fQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdEVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgTm9kZSogYXRDaGlsZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0RWxl
bWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gYXRDaGls
ZCkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTcGxpdEVsZW1lbnRDb21tYW5kOjpj
cmVhdGUoZWxlbWVudCwgYXRDaGlsZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjptZXJnZUlkZW50aWNhbEVsZW1lbnRzKEVsZW1lbnQqIGZpcnN0LCBFbGVtZW50KiBzZWNvbmQp
Cit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1lbnRzKFBhc3NS
ZWZQdHI8RWxlbWVudD4gZmlyc3QsIFBhc3NSZWZQdHI8RWxlbWVudD4gc2Vjb25kKQogewotICAg
IEFTU0VSVCghZmlyc3QtPmlzRGVzY2VuZGFudE9mKHNlY29uZCkgJiYgc2Vjb25kICE9IGZpcnN0
KTsKKyAgICBBU1NFUlQoIWZpcnN0LT5pc0Rlc2NlbmRhbnRPZihzZWNvbmQuZ2V0KCkpICYmIHNl
Y29uZCAhPSBmaXJzdCk7CiAgICAgaWYgKGZpcnN0LT5uZXh0U2libGluZygpICE9IHNlY29uZCkg
ewotICAgICAgICByZW1vdmVOb2RlKHNlY29uZCk7Ci0gICAgICAgIGluc2VydE5vZGVBZnRlcihz
ZWNvbmQsIGZpcnN0KTsKKyAgICAgICAgcmVtb3ZlTm9kZShzZWNvbmQuZ2V0KCkpOworICAgICAg
ICBpbnNlcnROb2RlQWZ0ZXIoc2Vjb25kLmdldCgpLCBmaXJzdC5nZXQoKSk7CiAgICAgfQogICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpj
cmVhdGUoZmlyc3QsIHNlY29uZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3
cmFwQ29udGVudHNJbkR1bW15U3BhbihFbGVtZW50KiBlbGVtZW50KQordm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6d3JhcENvbnRlbnRzSW5EdW1teVNwYW4oUGFzc1JlZlB0cjxFbGVtZW50PiBl
bGVtZW50KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KFRleHQgKnRleHQsIGludCBv
ZmZzZXQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlQ29udGFpbmlu
Z0VsZW1lbnQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZDo6Y3JlYXRlKHRleHQsIG9mZnNldCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpqb2luVGV4dE5vZGVzKFRleHQgKnRleHQxLCBUZXh0ICp0ZXh0MikKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmpvaW5UZXh0Tm9kZXMoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0MSwgUGFz
c1JlZlB0cjxUZXh0PiB0ZXh0MikKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShKb2lu
VGV4dE5vZGVzQ29tbWFuZDo6Y3JlYXRlKHRleHQxLCB0ZXh0MikpOwogfQogCi12b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVj
dEluc2VydGVkVGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlucHV0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQogewogICAgIGludCBvZmZz
ZXQgPSAwOwogICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwpAQCAtMjkzLDE5ICsyOTcs
MTkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5wdXRUZXh0KGNvbgogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0VGV4dEludG9Ob2RlKFRleHQgKm5v
ZGUsIGludCBvZmZzZXQsIGNvbnN0IFN0cmluZyAmdGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHRleHQp
KTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKFRl
eHQgKm5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgY291bnQpKTsKIH0K
IAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGUoVGV4dCAqbm9k
ZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBjb25zdCBTdHJpbmcgJnJlcGxhY2VtZW50VGV4dCkK
K3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFRleHQpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoRGVsZXRl
RnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgY291bnQpKTsKKyAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUo
bm9kZS5nZXQoKSwgb2Zmc2V0LCBjb3VudCkpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHJlcGxhY2Vt
ZW50VGV4dCkpOwogfQogCkBAIC0zMjYsMTEgKzMzMCwxMCBAQCBQb3NpdGlvbiBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cG9zaXRpb25PCiAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZSh0YWJT
cGFuKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0VGFiU3Bh
blBvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3MpCit2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXRUYWJTcGFuUG9zaXRpb24oUGFzc1JlZlB0cjxOb2Rl
PiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zKQogewogICAgIC8vIGluc2VydCBub2RlIGJlZm9y
ZSwgYWZ0ZXIsIG9yIGF0IHNwbGl0IG9mIHRhYiBzcGFuCi0gICAgUG9zaXRpb24gaW5zZXJ0UG9z
ID0gcG9zaXRpb25PdXRzaWRlVGFiU3Bhbihwb3MpOwotICAgIGluc2VydE5vZGVBdChub2RlLCBp
bnNlcnRQb3MpOworICAgIGluc2VydE5vZGVBdChub2RlLCBwb3NpdGlvbk91dHNpZGVUYWJTcGFu
KHBvcykpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
Ym9vbCBzbWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxh
Y2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKQpAQCAtMzQ1LDE5ICszNDgsMTcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aQogICAgICAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9u
LCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSwgZXhwYW5kRm9y
U3BlY2lhbEVsZW1lbnRzKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZUNTU1Byb3BlcnR5KENTU1N0eWxlRGVjbGFyYXRpb24gKmRlY2wsIGludCBwcm9wZXJ0eSkKK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNTU1Byb3BlcnR5KFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQog
ewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIGRlY2wsIHByb3BlcnR5KSk7CisgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5
bGUsIHByb3BlcnR5KSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5v
ZGVBdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZShQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
IHsKLSAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQXR0
cmlidXRlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSkpOworICAgIHNldE5vZGVB
dHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCBBdG9taWNTdHJpbmcoKSk7OwogfQogCi12b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVt
ZW50PiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CiB9CkBA
IC01NDYsMTYgKzU0NywxNiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNp
Z25pCiAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQocG9zLCBlbmQpOwogfQogCi1QYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmRCbG9ja1BsYWNlaG9sZGVyKE5v
ZGUqIG5vZGUpCitQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmRC
bG9ja1BsYWNlaG9sZGVyKFBhc3NSZWZQdHI8RWxlbWVudD4gY29udGFpbmVyKQogewotICAgIGlm
ICghbm9kZSkKKyAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2NrRmxvdyB8fCBpc0lubGluZUZsb3cgd2hlbiBkZWxl
dGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0LgotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigp
KTsKKyAgICAvLyBTaG91bGQgYXNzZXJ0IGlzQmxvY2tGbG93IHx8IGlzSW5saW5lRmxvdyB3aGVu
IGRlbGV0aW9uIGltcHJvdmVzLiBTZWUgNDI0NDk2NC4KKyAgICBBU1NFUlQoY29udGFpbmVyLT5y
ZW5kZXJlcigpKTsKIAogICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJsb2Nr
UGxhY2Vob2xkZXJFbGVtZW50KGRvY3VtZW50KCkpOwotICAgIGFwcGVuZE5vZGUocGxhY2Vob2xk
ZXIuZ2V0KCksIG5vZGUpOworICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIGNvbnRhaW5lcik7
CiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyLnJlbGVhc2UoKTsKIH0KIApAQCAtNTcyLDIxICs1NzMs
MjEgQEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aQogICAgIHJldHVy
biBwbGFjZWhvbGRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChOb2RlKiBub2RlKQorUGFz
c1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklm
TmVlZGVkKEVsZW1lbnQqIGNvbnRhaW5lcikKIHsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFj
b250YWluZXIpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgdXBkYXRlTGF5b3V0KCk7CiAKLSAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIgfHwgIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
ICAgICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHRvIG1ha2Ugc3VyZSBpdCBmb2xsb3dzCiAg
ICAgLy8gYW55IHVucmVuZGVyZWQgYmxvY2tzCiAgICAgaWYgKHJlbmRlcmVyLT5oZWlnaHQoKSA9
PSAwIHx8IChyZW5kZXJlci0+aXNMaXN0SXRlbSgpICYmIHJlbmRlcmVyLT5pc0VtcHR5KCkpKQot
ICAgICAgICByZXR1cm4gYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihub2RlKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoY29udGFpbmVyKTsKIAogICAgIHJldHVybiAwOwog
fQpAQCAtNjEzLDkgKzYxNCwxMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQ
bGFjZWhvCiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5l
d0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewot
ICAgIFJlZlB0cjxOb2RlPiBwYXJhZ3JhcGhFbGVtZW50ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFw
aEVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgYXBwZW5kTm9kZShjcmVhdGVCcmVha0VsZW1lbnQo
ZG9jdW1lbnQoKSkuZ2V0KCksIHBhcmFncmFwaEVsZW1lbnQuZ2V0KCkpOwotICAgIGluc2VydE5v
ZGVBdChwYXJhZ3JhcGhFbGVtZW50LmdldCgpLCBwb3NpdGlvbik7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IHBhcmFncmFwaEVsZW1lbnQgPSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1
bWVudCgpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHBhcmFncmFwaEVsZW1lbnQtPmFw
cGVuZENoaWxkKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwgZWMpOworICAg
IGluc2VydE5vZGVBdChwYXJhZ3JhcGhFbGVtZW50LCBwb3NpdGlvbik7CiAgICAgcmV0dXJuIHBh
cmFncmFwaEVsZW1lbnQucmVsZWFzZSgpOwogfQogCkBAIC04NDMsNyArODQ1LDcgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIGRlc3RpbmF0aW9uSW5kZXgg
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlLmdldCgp
LCB0cnVlKTsKICAgICAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZGVzdGluYXRpb24pOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgZnJhZ21lbnQuZ2V0KCksIHRydWUsIGZhbHNlLCAhcHJlc2VydmVTdHlsZSwg
ZmFsc2UsIHRydWUpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGZyYWdtZW50LCB0cnVlLCBmYWxzZSwgIXBy
ZXNlcnZlU3R5bGUsIGZhbHNlLCB0cnVlKSk7CiAgICAgLy8gUmVzdG9yZSBzdHlsZXMgZnJvbSBh
biBlbXB0eSBwYXJhZ3JhcGggdG8gdGhlIG5ldyBlbXB0eSBwYXJhZ3JhcGguCiAgICAgaWYgKHN0
eWxlSW5FbXB0eVBhcmFncmFwaCkKICAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJh
Z3JhcGguZ2V0KCkpOwpAQCAtODc1LDE5ICs4NzcsMTkgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIGlmICghbGlzdE5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZWZQdHI8Tm9kZT4gbmV3Qmxv
Y2sgPSBpc0xpc3RFbGVtZW50KGxpc3ROb2RlLT5wYXJlbnROb2RlKCkpID8gY3JlYXRlTGlzdEl0
ZW1FbGVtZW50KGRvY3VtZW50KCkpIDogY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9j
dW1lbnQoKSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Jsb2NrID0gaXNMaXN0RWxlbWVudChs
aXN0Tm9kZS0+cGFyZW50Tm9kZSgpKSA/IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgp
KSA6IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIAogICAg
IGlmIChlbXB0eUxpc3RJdGVtLT5yZW5kZXJlcigpLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChlbXB0eUxpc3RJdGVtLT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAg
ICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obGlzdE5vZGUpLCBlbXB0
eUxpc3RJdGVtKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuZXdCbG9jay5nZXQoKSwgbGlz
dE5vZGUpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5ld0Jsb2NrLCBsaXN0Tm9kZSk7CiAg
ICAgICAgIHJlbW92ZU5vZGUoZW1wdHlMaXN0SXRlbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aW5zZXJ0Tm9kZUFmdGVyKG5ld0Jsb2NrLmdldCgpLCBsaXN0Tm9kZSk7CisgICAgICAgIGluc2Vy
dE5vZGVBZnRlcihuZXdCbG9jaywgbGlzdE5vZGUpOwogICAgICAgICByZW1vdmVOb2RlKGVtcHR5
TGlzdEl0ZW0tPnJlbmRlcmVyKCktPnByZXZpb3VzU2libGluZygpID8gZW1wdHlMaXN0SXRlbSA6
IGxpc3ROb2RlKTsKICAgICB9CiAgICAgCi0gICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihuZXdC
bG9jay5nZXQoKSk7CisgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihuZXdCbG9jayk7CiAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihuZXdCbG9jay5nZXQoKSwgMCks
IERPV05TVFJFQU0pKTsKICAgICAKICAgICBjb21wdXRlZFN0eWxlKGVuZGluZ1NlbGVjdGlvbigp
LnN0YXJ0KCkubm9kZSgpKS0+ZGlmZihzdHlsZS5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBDb21wb3NpdGVFZGl0Q29tbWFuZF9oCiAKICNpbmNsdWRlICJFZGl0Q29tbWFu
ZC5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDUwICs0NSw1MCBAQCBwcm90ZWN0ZWQ6
CiAgICAgLy8KICAgICAvLyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhl
bHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0ZSBjb21tYW5kcwog
ICAgIC8vCi0gICAgdm9pZCBhcHBlbmROb2RlKE5vZGUqIGFwcGVuZENoaWxkLCBOb2RlKiBwYXJl
bnROb2RlKTsKKyAgICB2b2lkIGFwcGVuZE5vZGUoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0
cjxFbGVtZW50PiBwYXJlbnQpOwogICAgIHZvaWQgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKICAgICB2
b2lkIGFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuZCwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRy
aWJ1dGVzKTsKLSAgICB2b2lkIGFwcGx5U3R5bGVkRWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9p
ZCByZW1vdmVTdHlsZWRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGFwcGx5U3R5bGVkRWxl
bWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlZEVsZW1lbnQo
UGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFy
dERlbGV0ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29s
IHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSB0cnVlKTsK
ICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVs
ZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVw
bGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9IHRydWUpOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCogbm9kZSwgaW50IG9mZnNldCwg
aW50IGNvdW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQ
dHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwogICAgIHZvaWQgaW5w
dXRUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwot
ICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyKE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGls
ZCk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQXQoTm9kZSogaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0
aW9uJik7Ci0gICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlKE5vZGUqIGluc2VydENoaWxkLCBOb2Rl
KiByZWZDaGlsZCk7CisgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIoUGFzc1JlZlB0cjxOb2RlPiwg
UGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCk7CisgICAgdm9pZCBpbnNlcnROb2RlQXQoUGFzc1Jl
ZlB0cjxOb2RlPiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIGluc2VydE5vZGVBdFRhYlNw
YW5Qb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQb3NpdGlvbiYpOworICAgIHZvaWQg
aW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNo
aWxkKTsKICAgICB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihib29sIHVzZURlZmF1bHRQ
YXJhZ3JhcGhFbGVtZW50ID0gZmFsc2UpOwogICAgIHZvaWQgaW5zZXJ0TGluZUJyZWFrKCk7Ci0g
ICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoVGV4dCogbm9kZSwgaW50IG9mZnNldCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKLSAgICB2b2lkIGpvaW5UZXh0Tm9kZXMoVGV4dCosIFRleHQqKTsKKyAg
ICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCBqb2luVGV4dE5vZGVzKFBhc3NSZWZQ
dHI8VGV4dD4sIFBhc3NSZWZQdHI8VGV4dD4pOworICAgIHZvaWQgbWVyZ2VJZGVudGljYWxFbGVt
ZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lk
IHJlYmFsYW5jZVdoaXRlc3BhY2UoKTsKICAgICB2b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2VBdChj
b25zdCBQb3NpdGlvbiYpOwotICAgIHZvaWQgcHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9y
U3BsaXQoUG9zaXRpb24mIHBvc2l0aW9uKTsKLSAgICB2b2lkIHJlbW92ZUNTU1Byb3BlcnR5KENT
U1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHkpOwotICAgIHZvaWQgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2
b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShOb2RlKiwgaW50IGZyb20sIGludCB0byk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihOb2RlKik7Ci0gICAgdm9pZCByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3Rv
cnMoTm9kZSopOworICAgIHZvaWQgcHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQo
UG9zaXRpb24mKTsKKyAgICB2b2lkIHJlbW92ZUNTU1Byb3BlcnR5KFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBDU1NQcm9wZXJ0eUlEKTsKKyAgICB2b2lkIHJlbW92ZU5v
ZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlKTsKKyAgICB2b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShQYXNzUmVmUHRyPE5vZGU+
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5v
ZGUoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0
b3JzKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIHZvaWQgcHJ1bmUoUGFzc1JlZlB0cjxOb2RlPik7
Ci0gICAgdm9pZCByZXBsYWNlVGV4dEluTm9kZShUZXh0KiBub2RlLCBpbnQgb2Zmc2V0LCBpbnQg
Y291bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKKyAgICB2b2lkIHJlcGxhY2VU
ZXh0SW5Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKICAgICBQb3NpdGlvbiBwb3NpdGlv
bk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBpbnNlcnROb2RlQXRU
YWJTcGFuUG9zaXRpb24oTm9kZSosIGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBzZXROb2Rl
QXR0cmlidXRlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc3BsaXRUZXh0Tm9kZShUZXh0KiwgaW50IG9mZnNl
dCk7Ci0gICAgdm9pZCBzcGxpdEVsZW1lbnQoRWxlbWVudCosIE5vZGUqIGF0Q2hpbGQpOwotICAg
IHZvaWQgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50KiwgRWxlbWVudCopOwotICAgIHZv
aWQgd3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCopOwotICAgIHZvaWQgc3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50KFRleHQqLCBpbnQgb2Zmc2V0KTsKKyAgICB2b2lkIHNldE5v
ZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNwbGl0RWxlbWVu
dChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IGF0Q2hpbGQpOworICAgIHZv
aWQgc3BsaXRUZXh0Tm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQpOworICAg
IHZvaWQgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KFBhc3NSZWZQdHI8VGV4dD4sIHVu
c2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCB3cmFwQ29udGVudHNJbkR1bW15U3BhbihQYXNzUmVm
UHRyPEVsZW1lbnQ+KTsKIAogICAgIHZvaWQgZGVsZXRlSW5zaWduaWZpY2FudFRleHQoVGV4dCos
IGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgZGVs
ZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKGNvbnN0IFBvc2l0aW9uJik7CiAKLSAgICBQ
YXNzUmVmUHRyPE5vZGU+IGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoTm9kZSopOworICAgIFBhc3NS
ZWZQdHI8Tm9kZT4gYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihQYXNzUmVmUHRyPEVsZW1lbnQ+KTsK
ICAgICBQYXNzUmVmUHRyPE5vZGU+IGluc2VydEJsb2NrUGxhY2Vob2xkZXIoY29uc3QgUG9zaXRp
b24mKTsKLSAgICBQYXNzUmVmUHRyPE5vZGU+IGFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChO
b2RlKik7CisgICAgUGFzc1JlZlB0cjxOb2RlPiBhZGRCbG9ja1BsYWNlaG9sZGVySWZOZWVkZWQo
RWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFw
aEVsZW1lbnRBdChjb25zdCBQb3NpdGlvbiYpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDEzICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURlbGV0ZUZyb21UZXh0
Tm9kZUNvbW1hbmQ6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBu
b2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2Rl
LT5kb2N1bWVudCgpKSwgbV9ub2RlKG5vZGUpLCBtX29mZnNldChvZmZzZXQpLCBtX2NvdW50KGNv
dW50KQorRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQp
CisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9ub2Rl
KG5vZGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX2NvdW50KGNvdW50KQogewog
ICAgIEFTU0VSVChtX25vZGUpOwotICAgIEFTU0VSVChtX29mZnNldCA+PSAwKTsKLSAgICBBU1NF
UlQobV9vZmZzZXQgPCAoaW50KW1fbm9kZS0+bGVuZ3RoKCkpOwotICAgIEFTU0VSVChtX2NvdW50
ID49IDApOworICAgIEFTU0VSVChtX29mZnNldCA8PSBtX25vZGUtPmxlbmd0aCgpKTsKKyAgICBB
U1NFUlQobV9vZmZzZXQgKyBtX2NvdW50IDw9IG1fbm9kZS0+bGVuZ3RoKCkpOwogfQogCiB2b2lk
IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtNDUsMjAgKzQ3LDE4IEBA
IHZvaWQgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIG1fdGV4dCA9IG1fbm9kZS0+c3Vic3RyaW5nRGF0YShtX29mZnNl
dCwgbV9jb3VudCwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBpZiAoZWMpCisgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBtX25vZGUtPmRlbGV0ZURhdGEobV9vZmZzZXQsIG1fY291
bnQsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CiB9CiAKIHZvaWQgRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKLSAgICBBU1NF
UlQoIW1fdGV4dC5pc0VtcHR5KCkpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
RXhjZXB0aW9uQ29kZSBlYzsKICAgICBtX25vZGUtPmluc2VydERhdGEobV9vZmZzZXQsIG1fdGV4
dCwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5oCShy
ZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIwICszNCwyMCBAQCBjbGFzcyBUZXh0OwogCiBj
bGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5k
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZD4gY3JlYXRl
KFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVsZXRlRnJvbVRleHROb2RlQ29t
bWFuZChub2RlLCBvZmZzZXQsIGNvdW50KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiwgaW50IG9mZnNldCwgaW50IGNv
dW50KTsKKyAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4sIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBw
bHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKICAgICBSZWZQdHI8VGV4dD4g
bV9ub2RlOwotICAgIGludCBtX29mZnNldDsKLSAgICBpbnQgbV9jb3VudDsKKyAgICB1bnNpZ25l
ZCBtX29mZnNldDsKKyAgICB1bnNpZ25lZCBtX2NvdW50OwogICAgIFN0cmluZyBtX3RleHQ7CiB9
OwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0
ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwKICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkJlZm9y
ZU5vZGUobm9kZSk7CiB9CiAKLXZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9k
ZShOb2RlICpub2RlKQordm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKFBh
c3NSZWZQdHI8Tm9kZT4gbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsK
QEAgLTM0NCwxMiArMzQ0LDEyIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
Tm9kZSgKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoaXNUYWJsZVN0cnVjdHVyZU5v
ZGUobm9kZSkgfHwgbm9kZSA9PSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpIHsKKyAgICBp
ZiAoaXNUYWJsZVN0cnVjdHVyZU5vZGUobm9kZS5nZXQoKSkgfHwgbm9kZSA9PSBub2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCkpIHsKICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBhbiBlbGVtZW50
IG9mIHRhYmxlIHN0cnVjdHVyZTsgcmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAgICAgLy8gTGlr
ZXdpc2UgZm9yIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIE5vZGUgKmNoaWxk
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICBOb2RlICpyZW1v
dmUgPSBjaGlsZDsKKyAgICAgICAgICAgIE5vZGUqIHJlbW92ZSA9IGNoaWxkOwogICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGUo
cmVtb3ZlKTsKICAgICAgICAgfQpAQCAtMzY4LDkgKzM2OCw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVl
OwogICAgIAogICAgIC8vIEZJWE1FOiBVcGRhdGUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2Ug
YmVpbmcgZGVsZXRlZC4KLSAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKG5vZGUsIG1f
ZW5kaW5nUG9zaXRpb24pOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobm9kZSwg
bV9sZWFkaW5nV2hpdGVzcGFjZSk7Ci0gICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChu
b2RlLCBtX3RyYWlsaW5nV2hpdGVzcGFjZSk7CisgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVt
b3ZhbChub2RlLmdldCgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZv
ck5vZGVSZW1vdmFsKG5vZGUuZ2V0KCksIG1fbGVhZGluZ1doaXRlc3BhY2UpOworICAgIHVwZGF0
ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobm9kZS5nZXQoKSwgbV90cmFpbGluZ1doaXRlc3BhY2Up
OwogICAgIAogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKG5vZGUpOwogfQpA
QCAtMzg2LDEyICszODYsMTIgQEAgdm9pZCB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKE5v
ZGUqIAogICAgIH0KIH0KIAotdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0
RnJvbU5vZGUoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KQordm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2Rl
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIC8vIEZJWE1FOiBVcGRh
dGUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2UgYmVpbmcgZGVsZXRlZC4KLSAgICB1cGRhdGVQ
b3NpdGlvbkZvclRleHRSZW1vdmFsKG5vZGUsIG9mZnNldCwgY291bnQsIG1fZW5kaW5nUG9zaXRp
b24pOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwobm9kZSwgb2Zmc2V0LCBjb3Vu
dCwgbV9sZWFkaW5nV2hpdGVzcGFjZSk7Ci0gICAgdXBkYXRlUG9zaXRpb25Gb3JUZXh0UmVtb3Zh
bChub2RlLCBvZmZzZXQsIGNvdW50LCBtX3RyYWlsaW5nV2hpdGVzcGFjZSk7CisgICAgdXBkYXRl
UG9zaXRpb25Gb3JUZXh0UmVtb3ZhbChub2RlLmdldCgpLCBvZmZzZXQsIGNvdW50LCBtX2VuZGlu
Z1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKG5vZGUuZ2V0KCks
IG9mZnNldCwgY291bnQsIG1fbGVhZGluZ1doaXRlc3BhY2UpOworICAgIHVwZGF0ZVBvc2l0aW9u
Rm9yVGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0LCBjb3VudCwgbV90cmFpbGluZ1doaXRl
c3BhY2UpOwogICAgIAogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5v
ZGUobm9kZSwgb2Zmc2V0LCBjb3VudCk7CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgY2FsY3VsYXRlRW5kaW5nUG9zaXRpb24oKTsKICAgICB2b2lkIGNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKTsKICAgICB2b2lkIGNsZWFyVHJhbnNpZW50
U3RhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShOb2RlKik7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0KiwgaW50LCBpbnQpOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKIAog
ICAgIGJvb2wgbV9oYXNTZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBib29sIG1fc21hcnREZWxldGU7
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkocmV2aXNpb24gMzk0
MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDIxICsxMDcsMjEgQEAgdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJs
b2NrU3RhcnQgPSBzdGFydE9mQmxvY2soZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkp
OwogICAgIFZpc2libGVQb3NpdGlvbiBibG9ja0VuZCA9IGVuZE9mQmxvY2soZW5kaW5nU2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwotICAgIFJlZlB0cjxOb2RlPiBibG9ja05vZGUgPSBjcmVh
dGVFbGVtZW50KGRvY3VtZW50KCksIG1fdGFnTmFtZSk7Ci0gICAgUmVmUHRyPE5vZGU+IHBsYWNl
aG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxFbGVt
ZW50PiBibG9ja05vZGUgPSBjcmVhdGVFbGVtZW50KGRvY3VtZW50KCksIG1fdGFnTmFtZSk7Cisg
ICAgUmVmUHRyPEVsZW1lbnQ+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3Vt
ZW50KCkpOwogICAgIAogICAgIE5vZGUqIHJvb3QgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgp
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmICh2YWxpZEJsb2NrVGFnKHJl
Zk5vZGUtPm5vZGVOYW1lKCkubG93ZXIoKSkgJiYgCiAgICAgICAgIHBhcmFncmFwaFN0YXJ0ID09
IGJsb2NrU3RhcnQgJiYgcGFyYWdyYXBoRW5kID09IGJsb2NrRW5kICYmIAogICAgICAgICByZWZO
b2RlICE9IHJvb3QgJiYgIXJvb3QtPmlzRGVzY2VuZGFudE9mKHJlZk5vZGUpKQogICAgICAgICAv
LyBBbHJlYWR5IGluIGEgdmFsaWQgYmxvY2sgdGFnIHRoYXQgb25seSBjb250YWlucyB0aGUgY3Vy
cmVudCBwYXJhZ3JhcGgsIHNvIHdlIGNhbiBzd2FwIHdpdGggdGhlIG5ldyB0YWcKLSAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShibG9ja05vZGUuZ2V0KCksIHJlZk5vZGUpOworICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKGJsb2NrTm9kZSwgcmVmTm9kZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEF2b2lkIGluc2VydGluZyBpbnNpZGUgaW5saW5lIGVsZW1lbnRzIHRoYXQgc3Vycm91bmQgcGFy
YWdyYXBoU3RhcnQgd2l0aCB1cHN0cmVhbSgpLgogICAgICAgICAvLyBUaGlzIGlzIG9ubHkgdG8g
YXZvaWQgY3JlYXRpbmcgYmxvYXRlZCBtYXJrdXAuCi0gICAgICAgIGluc2VydE5vZGVBdChibG9j
a05vZGUuZ2V0KCksIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKSk7
CisgICAgICAgIGluc2VydE5vZGVBdChibG9ja05vZGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkudXBzdHJlYW0oKSk7CiAgICAgfQotICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIu
Z2V0KCksIGJsb2NrTm9kZS5nZXQoKSk7CisgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgYmxv
Y2tOb2RlKTsKICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gZGVzdGluYXRpb24oUG9zaXRpb24o
cGxhY2Vob2xkZXIuZ2V0KCksIDApKTsKICAgICBpZiAocGFyYWdyYXBoU3RhcnQgPT0gcGFyYWdy
YXBoRW5kICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgewpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAz
OTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDMyICs3MiwzMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RPckluZGVudEJs
b2NrcXVvdGUoY29uCiAKIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnRPdXRkZW50Q29tbWFu
ZChEb2N1bWVudCogZG9jdW1lbnQsIEVJbmRlbnRUeXBlIHR5cGVPZkFjdGlvbiwgaW50IG1hcmdp
bkluUGl4ZWxzKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3R5cGVP
ZkFjdGlvbih0eXBlT2ZBY3Rpb24pLCBtX21hcmdpbkluUGl4ZWxzKG1hcmdpbkluUGl4ZWxzKQot
e30KK3sKK30KIAogLy8gVGhpcyBmdW5jdGlvbiBpcyBhIHdvcmthcm91bmQgZm9yIG1vdmVQYXJh
Z3JhcGgncyB0ZW5kZW5jeSB0byBzdHJpcCBibG9ja3F1b3Rlcy4gSXQgdXBkYXRlcyBsYXN0Qmxv
Y2txdW90ZSB0byBwb2ludCB0byB0aGUKIC8vIGNvcnJlY3QgbGV2ZWwgZm9yIHRoZSBjdXJyZW50
IHBhcmFncmFwaCwgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgcGxhY2Vob2xkZXIgYnIgd2hl
cmUgdGhlIGluc2VydGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkLgotTm9kZSogSW5kZW50T3V0ZGVu
dENvbW1hbmQ6OnByZXBhcmVCbG9ja3F1b3RlTGV2ZWxGb3JJbnNlcnRpb24oVmlzaWJsZVBvc2l0
aW9uJiBjdXJyZW50UGFyYWdyYXBoLCBOb2RlKiogbGFzdEJsb2NrcXVvdGUpCitQYXNzUmVmUHRy
PEVsZW1lbnQ+IEluZGVudE91dGRlbnRDb21tYW5kOjpwcmVwYXJlQmxvY2txdW90ZUxldmVsRm9y
SW5zZXJ0aW9uKFZpc2libGVQb3NpdGlvbiYgY3VycmVudFBhcmFncmFwaCwgUmVmUHRyPEVsZW1l
bnQ+JiBsYXN0QmxvY2txdW90ZSkKIHsKICAgICBpbnQgY3VycmVudEJsb2NrcXVvdGVMZXZlbCA9
IDA7CiAgICAgaW50IGxhc3RCbG9ja3F1b3RlTGV2ZWwgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBj
dXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwogICAgIHdoaWxlICgobm9k
ZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCAwKSwg
JmlzSW5kZW50QmxvY2txdW90ZSkpKQogICAgICAgICBjdXJyZW50QmxvY2txdW90ZUxldmVsKys7
Ci0gICAgbm9kZSA9ICpsYXN0QmxvY2txdW90ZTsKKyAgICBub2RlID0gbGFzdEJsb2NrcXVvdGUu
Z2V0KCk7CiAgICAgd2hpbGUgKChub2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShQb3NpdGlvbihu
b2RlLT5wYXJlbnROb2RlKCksIDApLCAmaXNJbmRlbnRCbG9ja3F1b3RlKSkpCiAgICAgICAgIGxh
c3RCbG9ja3F1b3RlTGV2ZWwrKzsKICAgICB3aGlsZSAoY3VycmVudEJsb2NrcXVvdGVMZXZlbCA+
IGxhc3RCbG9ja3F1b3RlTGV2ZWwpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5ld0Jsb2NrcXVv
dGUgPSBjcmVhdGVJbmRlbnRCbG9ja3F1b3RlRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAg
YXBwZW5kTm9kZShuZXdCbG9ja3F1b3RlLmdldCgpLCAqbGFzdEJsb2NrcXVvdGUpOwotICAgICAg
ICAqbGFzdEJsb2NrcXVvdGUgPSBuZXdCbG9ja3F1b3RlLmdldCgpOworICAgICAgICBSZWZQdHI8
RWxlbWVudD4gbmV3QmxvY2txdW90ZSA9IGNyZWF0ZUluZGVudEJsb2NrcXVvdGVFbGVtZW50KGRv
Y3VtZW50KCkpOworICAgICAgICBhcHBlbmROb2RlKG5ld0Jsb2NrcXVvdGUsIGxhc3RCbG9ja3F1
b3RlKTsKKyAgICAgICAgbGFzdEJsb2NrcXVvdGUgPSBuZXdCbG9ja3F1b3RlOwogICAgICAgICBs
YXN0QmxvY2txdW90ZUxldmVsKys7CiAgICAgfQogICAgIHdoaWxlIChjdXJyZW50QmxvY2txdW90
ZUxldmVsIDwgbGFzdEJsb2NrcXVvdGVMZXZlbCkgewotICAgICAgICAqbGFzdEJsb2NrcXVvdGUg
PSBlbmNsb3NpbmdOb2RlT2ZUeXBlKFBvc2l0aW9uKCgqbGFzdEJsb2NrcXVvdGUpLT5wYXJlbnRO
b2RlKCksIDApLCAmaXNJbmRlbnRCbG9ja3F1b3RlKTsKKyAgICAgICAgbGFzdEJsb2NrcXVvdGUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShQb3NpdGlvbihsYXN0
QmxvY2txdW90ZS0+cGFyZW50Tm9kZSgpLCAwKSwgaXNJbmRlbnRCbG9ja3F1b3RlKSk7CiAgICAg
ICAgIGxhc3RCbG9ja3F1b3RlTGV2ZWwtLTsKICAgICB9Ci0gICAgUmVmUHRyPE5vZGU+IHBsYWNl
aG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwotICAgIGFwcGVuZE5vZGUo
cGxhY2Vob2xkZXIuZ2V0KCksICpsYXN0QmxvY2txdW90ZSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+
IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgIGFwcGVu
ZE5vZGUocGxhY2Vob2xkZXIsIGxhc3RCbG9ja3F1b3RlKTsKICAgICAvLyBBZGQgYW5vdGhlciBi
ciBiZWZvcmUgdGhlIHBsYWNlaG9sZGVyIGlmIGl0IGNvbGxhcHNlZC4KICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyhQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpOwogICAgIGlm
ICghaXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpKQpAQCAtMTIwLDU3ICsxMjEsNTcgQEAg
dm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50UmVnaW9uKAogICAgIC8vIGFuZCB0aGVy
ZSdzIG5vdGhpbmcgdG8gbW92ZS4KICAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZTZWxlY3Rp
b24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CiAgICAgaWYgKHN0YXJ0Lm5vZGUoKSA9
PSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihzdGFydCkpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+
IGJsb2NrcXVvdGUgPSBjcmVhdGVJbmRlbnRCbG9ja3F1b3RlRWxlbWVudChkb2N1bWVudCgpKTsK
LSAgICAgICAgaW5zZXJ0Tm9kZUF0KGJsb2NrcXVvdGUuZ2V0KCksIHN0YXJ0KTsKLSAgICAgICAg
UmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkp
OwotICAgICAgICBhcHBlbmROb2RlKHBsYWNlaG9sZGVyLmdldCgpLCBibG9ja3F1b3RlLmdldCgp
KTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGJsb2NrcXVvdGUgPSBjcmVhdGVJbmRlbnRCbG9j
a3F1b3RlRWxlbWVudChkb2N1bWVudCgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUF0KGJsb2NrcXVv
dGUsIHN0YXJ0KTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBsYWNlaG9sZGVyID0gY3JlYXRl
QnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICBhcHBlbmROb2RlKHBsYWNlaG9sZGVy
LCBibG9ja3F1b3RlKTsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3Np
dGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBOb2RlKiBwcmV2aW91c0xpc3ROb2RlID0gMDsKLSAgICBOb2Rl
KiBuZXdMaXN0Tm9kZSA9IDA7Ci0gICAgTm9kZSogbmV3QmxvY2txdW90ZSA9IDA7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IHByZXZpb3VzTGlzdE5vZGU7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0xp
c3ROb2RlOworICAgIFJlZlB0cjxFbGVtZW50PiBuZXdCbG9ja3F1b3RlOwogICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaChzdGFydE9mU2Vs
ZWN0aW9uKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kQWZ0ZXJTZWxlY3Rpb24gPSBlbmRPZlBh
cmFncmFwaChlbmRPZlBhcmFncmFwaChlbmRPZlNlbGVjdGlvbikubmV4dCgpKTsKICAgICB3aGls
ZSAoZW5kT2ZDdXJyZW50UGFyYWdyYXBoICE9IGVuZEFmdGVyU2VsZWN0aW9uKSB7CiAgICAgICAg
IC8vIEl0ZXJhdGUgYWNyb3NzIHRoZSBzZWxlY3RlZCBwYXJhZ3JhcGhzLi4uCiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaChlbmRPZkN1
cnJlbnRQYXJhZ3JhcGgubmV4dCgpKTsKLSAgICAgICAgTm9kZSogbGlzdE5vZGUgPSBlbmNsb3Np
bmdMaXN0KGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0g
ICAgICAgIE5vZGUqIGluc2VydGlvblBvaW50OworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbGlz
dE5vZGUgPSBlbmNsb3NpbmdMaXN0KGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBpbnNlcnRpb25Qb2ludDsKICAg
ICAgICAgaWYgKGxpc3ROb2RlKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xk
ZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBpbnNlcnRp
b25Qb2ludCA9IHBsYWNlaG9sZGVyLmdldCgpOworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICAg
ICAgaW5zZXJ0aW9uUG9pbnQgPSBwbGFjZWhvbGRlcjsKICAgICAgICAgICAgIG5ld0Jsb2NrcXVv
dGUgPSAwOwotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGxpc3RJdGVtID0gY3JlYXRlTGlzdEl0
ZW1FbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3RJ
dGVtID0gY3JlYXRlTGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgaWYg
KGxpc3ROb2RlID09IHByZXZpb3VzTGlzdE5vZGUpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUg
cHJldmlvdXMgcGFyYWdyYXBoIHdhcyBpbnNpZGUgdGhlIHNhbWUgbGlzdCwgc28gYWRkIHRoaXMg
bGlzdCBpdGVtIHRvIHRoZSBsaXN0IHdlIGFscmVhZHkgY3JlYXRlZAotICAgICAgICAgICAgICAg
IGFwcGVuZE5vZGUobGlzdEl0ZW0uZ2V0KCksIG5ld0xpc3ROb2RlKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmROb2RlKHBsYWNlaG9sZGVyLmdldCgpLCBsaXN0SXRlbS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbSwgbmV3TGlzdE5vZGUpOworICAgICAgICAgICAg
ICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIGxpc3RJdGVtKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGxpc3QgZWxlbWVudCwgaW5zZXJ0IGl0
IGJlZm9yZSB0aGUgY3VycmVudCBwYXJhZ3JhcGgsIGFuZCBtb3ZlIHRoZSBwYXJhZ3JhcGggaW50
byBpdC4KLSAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2xvbmVkTGlzdCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihsaXN0Tm9kZSktPmNsb25lTm9kZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaW5zZXJ0Tm9kZUJlZm9yZShjbG9uZWRMaXN0LmdldCgpLCBlbmNsb3NpbmdMaXN0Q2hpbGQo
ZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbS5nZXQoKSwgY2xvbmVkTGlzdC5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlci5nZXQoKSwgbGlzdEl0ZW0uZ2V0
KCkpOwotICAgICAgICAgICAgICAgIG5ld0xpc3ROb2RlID0gY2xvbmVkTGlzdC5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gY2xvbmVkTGlzdCA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8RWxlbWVudD4obGlzdE5vZGUtPmNsb25lTm9kZShmYWxzZSkpOworICAgICAgICAgICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoY2xvbmVkTGlzdCwgZW5jbG9zaW5nTGlzdENoaWxkKGVuZE9m
Q3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpOworICAgICAgICAgICAg
ICAgIGFwcGVuZE5vZGUobGlzdEl0ZW0sIGNsb25lZExpc3QpOworICAgICAgICAgICAgICAgIGFw
cGVuZE5vZGUocGxhY2Vob2xkZXIsIGxpc3RJdGVtKTsKKyAgICAgICAgICAgICAgICBuZXdMaXN0
Tm9kZSA9IGNsb25lZExpc3Q7CiAgICAgICAgICAgICAgICAgcHJldmlvdXNMaXN0Tm9kZSA9IGxp
c3ROb2RlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG5ld0Jsb2NrcXVvdGUp
CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcGFyYWdyYXBoIHdhcyBwdXQgaW50byBhIG5l
dyBibG9ja3F1b3RlLCBzbyBtb3ZlIHRoaXMgcGFyYWdyYXBoIHRoZXJlIGFzIHdlbGwKLSAgICAg
ICAgICAgIGluc2VydGlvblBvaW50ID0gcHJlcGFyZUJsb2NrcXVvdGVMZXZlbEZvckluc2VydGlv
bihlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsICZuZXdCbG9ja3F1b3RlKTsKKyAgICAgICAgICAgIGlu
c2VydGlvblBvaW50ID0gcHJlcGFyZUJsb2NrcXVvdGVMZXZlbEZvckluc2VydGlvbihlbmRPZkN1
cnJlbnRQYXJhZ3JhcGgsIG5ld0Jsb2NrcXVvdGUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIC8vIENyZWF0ZSBhIG5ldyBibG9ja3F1b3RlIGFuZCBpbnNlcnQgaXQgYXMgYSBjaGlsZCBv
ZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXZSBhY2NvbXBsaXNoCiAgICAgICAgICAgICAv
LyB0aGlzIGJ5IHNwbGl0dGluZyBhbGwgcGFyZW50cyBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgg
dXAgdG8gdGhhdCBwb2ludC4KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBibG9ja3F1b3RlID0g
Y3JlYXRlSW5kZW50QmxvY2txdW90ZUVsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gYmxvY2txdW90ZSA9IGNyZWF0ZUluZGVudEJsb2NrcXVvdGVFbGVtZW50
KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdy
YXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTm9kZSogZW5jbG9zaW5nQ2VsbCA9IGVuY2xvc2luZ05vZGVPZlR5cGUo
c3RhcnQsICZpc1RhYmxlQ2VsbCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlVG9TcGxpdFRvID0g
ZW5jbG9zaW5nQ2VsbCA/IGVuY2xvc2luZ0NlbGwgOiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihz
dGFydCk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gc3RhcnRPZk5ld0Jsb2NrID0gc3BsaXRU
cmVlVG9Ob2RlKHN0YXJ0Lm5vZGUoKSwgbm9kZVRvU3BsaXRUbyk7Ci0gICAgICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKGJsb2NrcXVvdGUuZ2V0KCksIHN0YXJ0T2ZOZXdCbG9jay5nZXQoKSk7Ci0g
ICAgICAgICAgICBuZXdCbG9ja3F1b3RlID0gYmxvY2txdW90ZS5nZXQoKTsKLSAgICAgICAgICAg
IGluc2VydGlvblBvaW50ID0gcHJlcGFyZUJsb2NrcXVvdGVMZXZlbEZvckluc2VydGlvbihlbmRP
ZkN1cnJlbnRQYXJhZ3JhcGgsICZuZXdCbG9ja3F1b3RlKTsKKyAgICAgICAgICAgIGluc2VydE5v
ZGVCZWZvcmUoYmxvY2txdW90ZSwgc3RhcnRPZk5ld0Jsb2NrKTsKKyAgICAgICAgICAgIG5ld0Js
b2NrcXVvdGUgPSBibG9ja3F1b3RlOworICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBwcmVw
YXJlQmxvY2txdW90ZUxldmVsRm9ySW5zZXJ0aW9uKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbmV3
QmxvY2txdW90ZSk7CiAgICAgICAgICAgICAvLyBEb24ndCBwdXQgdGhlIG5leHQgcGFyYWdyYXBo
IGluIHRoZSBibG9ja3F1b3RlIHdlIGp1c3QgY3JlYXRlZCBmb3IgdGhpcyBwYXJhZ3JhcGggdW5s
ZXNzIAogICAgICAgICAgICAgLy8gdGhlIG5leHQgcGFyYWdyYXBoIGlzIGluIHRoZSBzYW1lIGNl
bGwuCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nQ2VsbCAmJiBlbmNsb3NpbmdDZWxsICE9IGVu
Y2xvc2luZ05vZGVPZlR5cGUoZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksICZp
c1RhYmxlQ2VsbCkpCkBAIC0yMjMsOSArMjI0LDkgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFu
ZDo6b3V0ZGVudFBhcmFncgogICAgICAgICB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCA9IFZpc2li
bGVQb3NpdGlvbih2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsKICAg
ICAgICAgdmlzaWJsZUVuZE9mUGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9uKHZpc2libGVFbmRP
ZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgaWYgKHZpc2libGVTdGFydE9m
UGFyYWdyYXBoLmlzTm90TnVsbCgpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0
T2ZQYXJhZ3JhcGgpKQotICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFrRWxlbWVu
dChkb2N1bWVudCgpKS5nZXQoKSwgdmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxl
bnQoKSk7CisgICAgICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3Vt
ZW50KCkpLCB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAg
ICAgaWYgKHZpc2libGVFbmRPZlBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhaXNFbmRPZlBhcmFn
cmFwaCh2aXNpYmxlRW5kT2ZQYXJhZ3JhcGgpKQotICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNy
ZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwgdmlzaWJsZUVuZE9mUGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFr
RWxlbWVudChkb2N1bWVudCgpKSwgdmlzaWJsZUVuZE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIE5vZGUqIGVuY2xvc2luZ0Jsb2NrRmxv
dyA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGgpOwpA
QCAtMjMzLDcgKzIzNCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJh
Z3IKICAgICBpZiAoZW5jbG9zaW5nQmxvY2tGbG93ICE9IGVuY2xvc2luZ05vZGUpCiAgICAgICAg
IHNwbGl0QmxvY2txdW90ZU5vZGUgPSBzcGxpdFRyZWVUb05vZGUoZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCksIGVuY2xvc2luZ05vZGUsIHRydWUpOwog
ICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVu
dCgpKTsKLSAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVyLmdldCgpLCBzcGxpdEJsb2Nr
cXVvdGVOb2RlLmdldCgpKTsKKyAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVyLCBzcGxp
dEJsb2NrcXVvdGVOb2RlKTsKICAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGgodmlz
aWJsZVN0YXJ0T2ZQYXJhZ3JhcGgpLCBlbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kT2ZQYXJhZ3Jh
cGgpLCBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKSwgdHJ1
ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5oCShyZXZp
c2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbmRlbnRS
ZWdpb24oKTsKICAgICB2b2lkIG91dGRlbnRSZWdpb24oKTsKICAgICB2b2lkIG91dGRlbnRQYXJh
Z3JhcGgoKTsKLSAgICBOb2RlKiBwcmVwYXJlQmxvY2txdW90ZUxldmVsRm9ySW5zZXJ0aW9uKFZp
c2libGVQb3NpdGlvbiYsIE5vZGUqKik7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBwcmVwYXJl
QmxvY2txdW90ZUxldmVsRm9ySW5zZXJ0aW9uKFZpc2libGVQb3NpdGlvbiYsIFJlZlB0cjxFbGVt
ZW50PiYpOwogCiAgICAgRUluZGVudFR5cGUgbV90eXBlT2ZBY3Rpb247CiAgICAgaW50IG1fbWFy
Z2luSW5QaXhlbHM7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjkgKzMwLDI3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIGludCBvZmZzZXQs
IGNvbnN0IFN0cmluZyYgdGV4dCkKK0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQs
IGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKG5vZGUtPmRvY3Vt
ZW50KCkpCiAgICAgLCBtX25vZGUobm9kZSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAs
IG1fdGV4dCh0ZXh0KQogewogICAgIEFTU0VSVChtX25vZGUpOwotICAgIEFTU0VSVChvZmZzZXQg
Pj0gMCk7Ci0gICAgQVNTRVJUKCF0ZXh0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0
IDw9IG1fbm9kZS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCghbV90ZXh0LmlzRW1wdHkoKSk7CiB9
CiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBtX25vZGUtPmlu
c2VydERhdGEobV9vZmZzZXQsIG1fdGV4dCwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKIH0K
IAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgbV9ub2RlLT5k
ZWxldGVEYXRhKG1fb2Zmc2V0LCBtX3RleHQubGVuZ3RoKCksIGVjKTsKLSAgICBBU1NFUlQoZWMg
PT0gMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxOSArMzQsMTkgQEAgY2xhc3MgVGV4dDsKIAogY2xhc3MgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRl
eHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKG5vZGUs
IG9mZnNldCwgdGV4dCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBJbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5n
JiB0ZXh0KTsKKyAgICBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4g
bm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOwogCiAgICAgdmlydHVh
bCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKICAgICBS
ZWZQdHI8VGV4dD4gbV9ub2RlOwotICAgIGludCBtX29mZnNldDsKKyAgICB1bnNpZ25lZCBtX29m
ZnNldDsKICAgICBTdHJpbmcgbV90ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9J
bnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDI0
ICs1MSwyNCBAQCBib29sIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OnByZXNlcnZlc1R5CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9k
ZUFmdGVyUG9zaXRpb24oTm9kZSAqbm9kZSwgY29uc3QgUG9zaXRpb24gJnBvcykKK3ZvaWQgSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24oTm9kZSogbm9kZSwg
Y29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAgICAvLyBJbnNlcnQgdGhlIEJSIGFmdGVyIHRoZSBj
YXJldCBwb3NpdGlvbi4gSW4gdGhlIGNhc2UgdGhlCiAgICAgLy8gcG9zaXRpb24gaXMgYSBibG9j
aywgZG8gYW4gYXBwZW5kLiBXZSBkb24ndCB3YW50IHRvIGluc2VydAogICAgIC8vIHRoZSBCUiAq
YWZ0ZXIqIHRoZSBibG9jay4KLSAgICBOb2RlICpjYiA9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBjYiA9IHBvcy5ub2RlKCktPmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBpZiAoY2IgPT0gcG9zLm5vZGUoKSkKICAgICAgICAg
YXBwZW5kTm9kZShub2RlLCBjYik7CiAgICAgZWxzZQogICAgICAgICBpbnNlcnROb2RlQWZ0ZXIo
bm9kZSwgcG9zLm5vZGUoKSk7CiB9CiAKLXZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5z
ZXJ0Tm9kZUJlZm9yZVBvc2l0aW9uKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZwb3MpCit2
b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmVQb3NpdGlvbihOb2Rl
KiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zKQogewogICAgIC8vIEluc2VydCB0aGUgQlIgYWZ0
ZXIgdGhlIGNhcmV0IHBvc2l0aW9uLiBJbiB0aGUgY2FzZSB0aGUKICAgICAvLyBwb3NpdGlvbiBp
cyBhIGJsb2NrLCBkbyBhbiBhcHBlbmQuIFdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0CiAgICAgLy8g
dGhlIEJSICpiZWZvcmUqIHRoZSBibG9jay4KLSAgICBOb2RlICpjYiA9IHBvcy5ub2RlKCktPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBjYiA9IHBvcy5ub2RlKCkt
PmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBpZiAoY2IgPT0gcG9zLm5vZGUoKSkK
ICAgICAgICAgYXBwZW5kTm9kZShub2RlLCBjYik7CiAgICAgZWxzZQpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwxMiArMTY4
LDEyIEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBXaGVu
IHJlbW92aW5nIGEgbGlzdCwgd2UgbXVzdCBhbHdheXMgY3JlYXRlIGEgcGxhY2Vob2xkZXIgdG8g
YWN0IGFzIGEgcG9pbnQgb2YgaW5zZXJ0aW9uCiAgICAgICAgIC8vIGZvciB0aGUgbGlzdCBjb250
ZW50IGJlaW5nIHJlbW92ZWQuCiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBwbGFjZWhvbGRlciA9
IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5v
ZGVUb0luc2VydCA9IHBsYWNlaG9sZGVyOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbm9kZVRv
SW5zZXJ0ID0gcGxhY2Vob2xkZXI7CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IG9mIHRoZSBs
aXN0IGl0ZW0gd2lsbCBiZSBtb3ZlZCBpbnRvIGFub3RoZXIgbGlzdCwgcHV0IGl0IGluIGEgbGlz
dCBpdGVtCiAgICAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIGFuIG9ycGhhbmVkIGxp
c3QgY2hpbGQuCiAgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KGxpc3ROb2RlKSkgewogICAgICAg
ICAgICAgbm9kZVRvSW5zZXJ0ID0gY3JlYXRlTGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwot
ICAgICAgICAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlci5nZXQoKSwgbm9kZVRvSW5zZXJ0Lmdl
dCgpKTsKKyAgICAgICAgICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIG5vZGVUb0luc2VydCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChuZXh0TGlzdENoaWxkICYmIHByZXZp
b3VzTGlzdENoaWxkKSB7CkBAIC0yMTEsMjEgKzIxMSwyMSBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjpkb0FwcGx5KCkKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3RJdGVtRWxlbWVudCA9
IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAg
ICBhcHBlbmROb2RlKHBsYWNlaG9sZGVyLmdldCgpLCBsaXN0SXRlbUVsZW1lbnQuZ2V0KCkpOwot
ICAgICAgICBOb2RlKiBwcmV2aW91c0xpc3QgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KHByZXZp
b3VzUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwotICAgICAgICBOb2RlKiBuZXh0
TGlzdCA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QobmV4dFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpKTsKKyAgICAgICAgRWxlbWVudCogcHJldmlvdXNMaXN0ID0gb3V0ZXJtb3N0RW5j
bG9zaW5nTGlzdChwcmV2aW91c1Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAg
ICAgICAgRWxlbWVudCogbmV4dExpc3QgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KG5leHRQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CiAgICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9
IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwotICAgICAgICBOb2RlKiBwcmV2aW91c0Nl
bGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwocHJldmlvdXNQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgTm9kZSogbmV4dENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwobmV4dFBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xv
c2luZ1RhYmxlQ2VsbChzdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgRWxlbWVudCog
cHJldmlvdXNDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKHByZXZpb3VzUG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKSk7CisgICAgICAgIEVsZW1lbnQqIG5leHRDZWxsID0gZW5jbG9zaW5nVGFibGVD
ZWxsKG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgRWxlbWVudCogY3Vy
cmVudENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAg
ICAgICAgIGlmIChwcmV2aW91c0xpc3QgJiYgKCFwcmV2aW91c0xpc3QtPmhhc1RhZ05hbWUobGlz
dFRhZykgfHwgc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwcmV2aW91c0xpc3QpIHx8IHByZXZp
b3VzQ2VsbCAhPSBjdXJyZW50Q2VsbCkpCiAgICAgICAgICAgICBwcmV2aW91c0xpc3QgPSAwOwog
ICAgICAgICBpZiAobmV4dExpc3QgJiYgKCFuZXh0TGlzdC0+aGFzVGFnTmFtZShsaXN0VGFnKSB8
fCBzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKG5leHRMaXN0KSB8fCBuZXh0Q2VsbCAhPSBjdXJy
ZW50Q2VsbCkpCiAgICAgICAgICAgICBuZXh0TGlzdCA9IDA7CiAgICAgICAgIC8vIFBsYWNlIGxp
c3QgaXRlbSBpbnRvIGFkam9pbmluZyBsaXN0cy4KICAgICAgICAgaWYgKHByZXZpb3VzTGlzdCkK
LSAgICAgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LmdldCgpLCBwcmV2aW91c0xp
c3QpOworICAgICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQsIHByZXZpb3VzTGlz
dCk7CiAgICAgICAgIGVsc2UgaWYgKG5leHRMaXN0KQotICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0
KGxpc3RJdGVtRWxlbWVudC5nZXQoKSwgUG9zaXRpb24obmV4dExpc3QsIDApKTsKKyAgICAgICAg
ICAgIGluc2VydE5vZGVBdChsaXN0SXRlbUVsZW1lbnQsIFBvc2l0aW9uKG5leHRMaXN0LCAwKSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0LgogICAgICAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3RFbGVtZW50ID0gbV90eXBlID09IE9yZGVyZWRMaXN0
ID8gY3JlYXRlT3JkZXJlZExpc3RFbGVtZW50KGRvY3VtZW50KCkpIDogY3JlYXRlVW5vcmRlcmVk
TGlzdEVsZW1lbnQoZG9jdW1lbnQoKSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9k
ZUJlZm9yZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5n
L0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDM2ICszMSwzMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbnNlcnROb2RlQmVm
b3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBpbnNl
cnRDaGlsZCwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCkKLSAgICA6IFNpbXBsZUVkaXRDb21t
YW5kKHJlZkNoaWxkLT5kb2N1bWVudCgpKSwgbV9pbnNlcnRDaGlsZChpbnNlcnRDaGlsZCksIG1f
cmVmQ2hpbGQocmVmQ2hpbGQpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChyZWZDaGlsZC0+ZG9j
dW1lbnQoKSkKKyAgICAsIG1faW5zZXJ0Q2hpbGQoaW5zZXJ0Q2hpbGQpCisgICAgLCBtX3JlZkNo
aWxkKHJlZkNoaWxkKQogewogICAgIEFTU0VSVChtX2luc2VydENoaWxkKTsKKyAgICBBU1NFUlQo
IW1faW5zZXJ0Q2hpbGQtPnBhcmVudE5vZGUoKSk7CiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwor
ICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCkpOworCisgICAgQVNTRVJUKGVuY2xv
c2luZ05vZGVPZlR5cGUoUG9zaXRpb24obV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLCAwKSwgaXND
b250ZW50RWRpdGFibGUpIHx8ICFtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkp
OwogfQogCiB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBB
U1NFUlQobV9pbnNlcnRDaGlsZCk7Ci0gICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwotICAgIEFTU0VS
VChtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCkpOwotICAgIC8vIElmIHRoZSBjaGlsZCB0byBpbnNl
cnQgaXMgYWxyZWFkeSBpbiBhIHRyZWUsIGluc2VydGluZyBpdCB3aWxsIHJlbW92ZSBpdCBmcm9t
IGl0J3Mgb2xkIGxvY2F0aW9uCi0gICAgLy8gaW4gYW4gbm9uLXVuZG9hYmxlIHdheS4gIFdlIG1p
Z2h0IGV2ZW50dWFsbHkgZmluZCBpdCB1c2VmdWwgdG8gZG8gYW4gdW5kb2FibGUgcmVtb3ZlIGlu
IHRoaXMgY2FzZS4KLSAgICBBU1NFUlQoIW1faW5zZXJ0Q2hpbGQtPnBhcmVudCgpKTsKLSAgICBB
U1NFUlQoZW5jbG9zaW5nTm9kZU9mVHlwZShQb3NpdGlvbihtX3JlZkNoaWxkLT5wYXJlbnROb2Rl
KCksIDApLCAmaXNDb250ZW50RWRpdGFibGUpIHx8ICFtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCkt
PmF0dGFjaGVkKCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9yZWZDaGls
ZC0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobV9pbnNlcnRDaGlsZC5nZXQoKSwgbV9yZWZD
aGlsZC5nZXQoKSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBOb2RlKiBwYXJlbnQg
PSBtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUo
bV9pbnNlcnRDaGlsZC5nZXQoKSwgbV9yZWZDaGlsZC5nZXQoKSwgZWMpOwogfQogCiB2b2lkIElu
c2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEFTU0VSVChtX2luc2Vy
dENoaWxkKTsKLSAgICBBU1NFUlQobV9yZWZDaGlsZCk7Ci0gICAgQVNTRVJUKG1fcmVmQ2hpbGQt
PnBhcmVudE5vZGUoKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX3JlZkNo
aWxkLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1faW5zZXJ0Q2hpbGQuZ2V0KCksIGVjKTsK
LSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBtX2luc2Vy
dENoaWxkLT5yZW1vdmUoZWMpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykK
KysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG8KICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6IFRoZSByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQgY29udmVyc2lvbiBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvIGVuY2xv
c2luZ0Jsb2NrLgotICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhyYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQocG9zKS5ub2RlKCkpOworICAgIEVsZW1lbnQqIHN0YXJ0QmxvY2sg
PSBlbmNsb3NpbmdCbG9jayhyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKS5ub2RlKCkpOwog
ICAgIFBvc2l0aW9uIGNhbm9uaWNhbFBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MpLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgaWYgKCFzdGFydEJsb2NrIHx8ICFzdGFydEJsb2NrLT5wYXJlbnROb2Rl
KCkgfHwgCiAgICAgICAgIGlzVGFibGVDZWxsKHN0YXJ0QmxvY2spIHx8CkBAIC0xNTcsMTQgKzE1
NywxNCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgYm9v
bCBuZXN0TmV3QmxvY2sgPSBmYWxzZTsKIAogICAgIC8vIENyZWF0ZSBibG9jayB0byBiZSBpbnNl
cnRlZC4KLSAgICBSZWZQdHI8Tm9kZT4gYmxvY2tUb0luc2VydDsKKyAgICBSZWZQdHI8RWxlbWVu
dD4gYmxvY2tUb0luc2VydDsKICAgICBpZiAoc3RhcnRCbG9jayA9PSBzdGFydEJsb2NrLT5yb290
RWRpdGFibGVFbGVtZW50KCkpIHsKLSAgICAgICAgYmxvY2tUb0luc2VydCA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8Tm9kZT4oY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQoKSkp
OworICAgICAgICBibG9ja1RvSW5zZXJ0ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQo
ZG9jdW1lbnQoKSk7CiAgICAgICAgIG5lc3ROZXdCbG9jayA9IHRydWU7CiAgICAgfSBlbHNlIGlm
IChzaG91bGRVc2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChzdGFydEJsb2NrKSkgCi0gICAgICAg
IGJsb2NrVG9JbnNlcnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PE5vZGU+KGNyZWF0ZURlZmF1bHRQ
YXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50KCkpKTsKKyAgICAgICAgYmxvY2tUb0luc2VydCA9IGNy
ZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGVsc2UKLSAgICAg
ICAgYmxvY2tUb0luc2VydCA9IHN0YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7CisgICAgICAg
IGJsb2NrVG9JbnNlcnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEVsZW1lbnQ+KHN0YXJ0QmxvY2st
PmNsb25lTm9kZShmYWxzZSkpOwogICAgIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gSGFu
ZGxlIGNhc2Ugd2hlbiBwb3NpdGlvbiBpcyBpbiB0aGUgbGFzdCB2aXNpYmxlIHBvc2l0aW9uIGlu
IGl0cyBibG9jaywKQEAgLTE3NCwxNSArMTc0LDE1IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIGlmIChpc0ZpcnN0SW5CbG9jayAmJiAhbGlu
ZUJyZWFrRXhpc3RzQXRQb3NpdGlvbih2aXNpYmxlUG9zKSkgewogICAgICAgICAgICAgICAgIC8v
IFRoZSBibG9jayBpcyBlbXB0eS4gIENyZWF0ZSBhbiBlbXB0eSBibG9jayB0bwogICAgICAgICAg
ICAgICAgIC8vIHJlcHJlc2VudCB0aGUgcGFyYWdyYXBoIHRoYXQgd2UncmUgbGVhdmluZy4KLSAg
ICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gZXh0cmFCbG9jayA9IGNyZWF0ZURlZmF1bHRQYXJh
Z3JhcGhFbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUoZXh0
cmFCbG9jay5nZXQoKSwgc3RhcnRCbG9jayk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQmxvY2tQ
bGFjZWhvbGRlcihleHRyYUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8RWxl
bWVudD4gZXh0cmFCbG9jayA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50
KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUoZXh0cmFCbG9jaywgc3RhcnRCbG9jayk7
CisgICAgICAgICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihleHRyYUJsb2NrKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZE5vZGUoYmxvY2tUb0luc2VydC5nZXQoKSwg
c3RhcnRCbG9jayk7CisgICAgICAgICAgICBhcHBlbmROb2RlKGJsb2NrVG9JbnNlcnQsIHN0YXJ0
QmxvY2spOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihibG9j
a1RvSW5zZXJ0LmdldCgpLCBzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIGluc2VydE5vZGVBZnRl
cihibG9ja1RvSW5zZXJ0LCBzdGFydEJsb2NrKTsKIAotICAgICAgICBhcHBlbmRCbG9ja1BsYWNl
aG9sZGVyKGJsb2NrVG9JbnNlcnQuZ2V0KCkpOworICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9s
ZGVyKGJsb2NrVG9JbnNlcnQpOwogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9u
KFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CiAgICAgICAg
IGFwcGx5U3R5bGVBZnRlckluc2VydGlvbihzdGFydEJsb2NrKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMjY4LDEwICsyNjgsMTAgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
OjpkbwogICAgIHVwZGF0ZUxheW91dCgpOwogICAgIAogICAgIC8vIE1ha2UgY2xvbmVzIG9mIGFu
Y2VzdG9ycyBpbiBiZXR3ZWVuIHRoZSBzdGFydCBub2RlIGFuZCB0aGUgc3RhcnQgYmxvY2suCi0g
ICAgUmVmUHRyPE5vZGU+IHBhcmVudCA9IGJsb2NrVG9JbnNlcnQ7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IHBhcmVudCA9IGJsb2NrVG9JbnNlcnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IGFuY2VzdG9y
cy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IGFu
Y2VzdG9yc1tpIC0gMV0tPmNsb25lTm9kZShmYWxzZSk7IC8vIHNoYWxsb3cgY2xvbmUKLSAgICAg
ICAgYXBwZW5kTm9kZShjaGlsZC5nZXQoKSwgcGFyZW50LmdldCgpKTsKKyAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IGNoaWxkID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFbGVtZW50PihhbmNlc3RvcnNb
aSAtIDFdLT5jbG9uZU5vZGUoZmFsc2UpKTsgLy8gc2hhbGxvdyBjbG9uZQorICAgICAgICBhcHBl
bmROb2RlKGNoaWxkLCBwYXJlbnQpOwogICAgICAgICBwYXJlbnQgPSBjaGlsZC5yZWxlYXNlKCk7
CiAgICAgfQogCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kOjpkbwogICAgIGlmICghYW5jZXN0b3JzLmlzRW1wdHkoKSkgewogICAgICAgICBO
b2RlKiBsZWZ0UGFyZW50ID0gYW5jZXN0b3JzLmZpcnN0KCk7CiAgICAgICAgIHdoaWxlIChsZWZ0
UGFyZW50ICYmIGxlZnRQYXJlbnQgIT0gc3RhcnRCbG9jaykgewotICAgICAgICAgICAgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4ocGFyZW50LT5wYXJlbnROb2RlKCkpOwogICAgICAgICAgICAgTm9kZSogbiA9
IGxlZnRQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobiAmJiBuICE9
IGJsb2NrVG9JbnNlcnQpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuZXh0ID0gbi0+bmV4dFNp
YmxpbmcoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAko
cmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzMyArNDQsMzcgQEAgdm9pZCBKb2luVGV4dE5vZGVz
Q29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwogICAgIEFTU0VSVCht
X3RleHQyKTsKLSAgICBBU1NFUlQobV90ZXh0MS0+bmV4dFNpYmxpbmcoKSA9PSBtX3RleHQyKTsK
KworICAgIGlmIChtX3RleHQxLT5uZXh0U2libGluZygpICE9IG1fdGV4dDIpCisgICAgICAgIHJl
dHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1fdGV4dDItPmluc2VydERh
dGEoMCwgbV90ZXh0MS0+ZGF0YSgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotCi0gICAg
bV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX3RleHQxLmdldCgpLCBlYyk7Ci0g
ICAgQVNTRVJUKGVjID09IDApOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9vZmZzZXQgPSBtX3RleHQxLT5sZW5ndGgoKTsKKyAgICBtX3RleHQxLT5yZW1vdmUoZWMpOwog
fQogCiB2b2lkIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb1VuYXBwbHkoKQogeworICAgIEFTU0VS
VChtX3RleHQxKTsKICAgICBBU1NFUlQobV90ZXh0Mik7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID4g
MCk7CisKKyAgICBpZiAobV90ZXh0MS0+cGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBOb2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJl
bnQpCisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAg
bV90ZXh0Mi0+ZGVsZXRlRGF0YSgwLCBtX29mZnNldCwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAw
KTsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX3RleHQxLmdldCgpLCBtX3RleHQyLmdldCgp
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX3RleHQyLT5wYXJl
bnROb2RlKCktPmluc2VydEJlZm9yZShtX3RleHQxLmdldCgpLCBtX3RleHQyLmdldCgpLCBlYyk7
Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgICAgICAKLSAgICBBU1NFUlQobV90ZXh0Mi0+cHJl
dmlvdXNTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7Ci0gICAgQVNTRVJUKG1fdGV4dDItPnByZXZp
b3VzU2libGluZygpID09IG1fdGV4dDEpOworICAgIG1fdGV4dDItPmRlbGV0ZURhdGEoMCwgbV90
ZXh0MS0+bGVuZ3RoKCksIGVjKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmgJKHJldmlzaW9uIDM5NDI3KQorKysg
V2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQxOwogICAg
IFJlZlB0cjxUZXh0PiBtX3RleHQyOwotICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2Fs
RWxlbWVudHNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUv
ZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDMwICszMSwzMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBNZXJnZUlkZW50aWNh
bEVsZW1lbnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoUGFzc1JlZlB0
cjxFbGVtZW50PiBmaXJzdCwgUGFzc1JlZlB0cjxFbGVtZW50PiBzZWNvbmQpCi0gICAgOiBTaW1w
bGVFZGl0Q29tbWFuZChmaXJzdC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudDEoZmlyc3QpLCBtX2Vs
ZW1lbnQyKHNlY29uZCkKKyAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGZpcnN0LT5kb2N1bWVudCgp
KQorICAgICwgbV9lbGVtZW50MShmaXJzdCkKKyAgICAsIG1fZWxlbWVudDIoc2Vjb25kKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKICAgICBBU1NFUlQobV9lbGVtZW50Mik7CisgICAgQVNT
RVJUKG1fZWxlbWVudDEtPm5leHRTaWJsaW5nKCkgPT0gbV9lbGVtZW50Mik7CiB9CiAKIHZvaWQg
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEFTU0VSVCht
X2VsZW1lbnQxKTsKLSAgICBBU1NFUlQobV9lbGVtZW50Mik7Ci0gICAgQVNTRVJUKG1fZWxlbWVu
dDEtPm5leHRTaWJsaW5nKCkgPT0gbV9lbGVtZW50Mik7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaWYgKG1fZWxlbWVudDEtPm5leHRTaWJsaW5nKCkgIT0gbV9lbGVtZW50
MikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2F0Q2hpbGQpCi0gICAgICAgIG1fYXRD
aGlsZCA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsKKyAgICBtX2F0Q2hpbGQgPSBtX2VsZW1l
bnQyLT5maXJzdENoaWxkKCk7CiAKLSAgICB3aGlsZSAobV9lbGVtZW50MS0+bGFzdENoaWxkKCkp
IHsKLSAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEtPmxhc3RDaGls
ZCgpLCBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKGVjID09
IDApOwotICAgIH0KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKworICAgIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiBjaGlsZHJlbjsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9lbGVtZW50MS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKworICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4u
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBt
X2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0ucmVsZWFzZSgpLCBtX2F0Q2hpbGQu
Z2V0KCksIGVjKTsKIAotICAgIG1fZWxlbWVudDItPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQo
bV9lbGVtZW50MS5nZXQoKSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBtX2VsZW1l
bnQxLT5yZW1vdmUoZWMpOwogfQogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
Ojpkb1VuYXBwbHkoKQpAQCAtNjIsMTYgKzY1LDI1IEBAIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQ6OmRvVW4KICAgICBBU1NFUlQobV9lbGVtZW50MSk7CiAgICAgQVNTRVJUKG1f
ZWxlbWVudDIpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPE5vZGU+
IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVsZWFzZSgpOwogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50
KCktPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBlYyk7
Ci0gICAgQVNTRVJUKGVjID09IDApOworICAgIE5vZGUqIHBhcmVudCA9IG1fZWxlbWVudDItPnBh
cmVudCgpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKIAotICAgIHdoaWxlIChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkgIT0g
bV9hdENoaWxkKSB7Ci0gICAgICAgIEFTU0VSVChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkpOwot
ICAgICAgICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCks
IGVjKTsKLSAgICAgICAgQVNTRVJUKGVjID09IDApOwotICAgIH0KKyAgICBwYXJlbnQtPmluc2Vy
dEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gY2hpbGRy
ZW47CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsgY2hp
bGQgJiYgY2hpbGQgIT0gYXRDaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKworICAgIHNpemVfdCBzaXplID0gY2hpbGRy
ZW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChjaGlsZHJlbltpXS5yZWxlYXNlKCksIGVjKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL01vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0
aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3
ICsxMTksNyBAQCB2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluCiAgICAg
fQogfQogCi12b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmFwcGVuZFNpYmxp
bmdOb2RlUmFuZ2UoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlLCBOb2RlKiBuZXdQYXJl
bnQpCit2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmFwcGVuZFNpYmxpbmdO
b2RlUmFuZ2UoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlLCBFbGVtZW50KiBuZXdQYXJl
bnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAoMSkgewpAQCAt
MTc4LDE0ICsxNzgsMTQgQEAgdm9pZCBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OgogICAgIE5vZGUqIHByZXZpb3VzSXRlbSA9IHN0YXJ0TGlzdENoaWxkLT5yZW5kZXJlcigpLT5w
cmV2aW91c1NpYmxpbmcoKS0+ZWxlbWVudCgpOwogICAgIGlmIChpc0xpc3RFbGVtZW50KHByZXZp
b3VzSXRlbSkpIHsKICAgICAgICAgLy8gbW92ZSBub2RlcyB1cCBpbnRvIHByZWNlZGluZyBsaXN0
Ci0gICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlUmFuZ2Uoc3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RD
aGlsZCwgcHJldmlvdXNJdGVtKTsKKyAgICAgICAgYXBwZW5kU2libGluZ05vZGVSYW5nZShzdGFy
dExpc3RDaGlsZCwgZW5kTGlzdENoaWxkLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocHJldmlvdXNJ
dGVtKSk7CiAgICAgICAgIG1fbGlzdEVsZW1lbnQgPSBwcmV2aW91c0l0ZW07CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gY3JlYXRlIGEgc3VibGlzdCBmb3IgdGhlIHByZWNlZGluZyBlbGVtZW50
IGFuZCBtb3ZlIG5vZGVzIHRoZXJlCi0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQ7Cisg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdQYXJlbnQ7CiAgICAgICAgIHN3aXRjaCAobV9saXN0
VHlwZSkgewogICAgICAgICAgICAgY2FzZSBJbmhlcml0ZWRMaXN0VHlwZToKLSAgICAgICAgICAg
ICAgICBuZXdQYXJlbnQgPSBzdGFydExpc3RDaGlsZC0+cGFyZW50Tm9kZSgpLT5jbG9uZU5vZGUo
ZmFsc2UpOworICAgICAgICAgICAgICAgIG5ld1BhcmVudCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
RWxlbWVudD4oc3RhcnRMaXN0Q2hpbGQtPnBhcmVudE5vZGUoKS0+Y2xvbmVOb2RlKGZhbHNlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIE9yZGVyZWRMaXN0Ogog
ICAgICAgICAgICAgICAgIG5ld1BhcmVudCA9IGNyZWF0ZU9yZGVyZWRMaXN0RWxlbWVudChkb2N1
bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmgJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgOiAKIHByb3RlY3RlZDoKICAgICBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kKERvY3VtZW50Kik7CiAgICAgCi0gICAgdm9pZCBhcHBlbmRTaWJs
aW5nTm9kZVJhbmdlKE5vZGUqIHN0YXJ0Tm9kZSwgTm9kZSogZW5kTm9kZSwgTm9kZSogbmV3UGFy
ZW50KTsKKyAgICB2b2lkIGFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UoTm9kZSogc3RhcnROb2RlLCBO
b2RlKiBlbmROb2RlLCBFbGVtZW50KiBuZXdQYXJlbnQpOwogICAgIHZvaWQgaW5zZXJ0U2libGlu
Z05vZGVSYW5nZUJlZm9yZShOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5vZGUsIE5vZGUqIHJl
Zk5vZGUpOwogICAgIHZvaWQgaW5zZXJ0U2libGluZ05vZGVSYW5nZUFmdGVyKE5vZGUqIHN0YXJ0
Tm9kZSwgTm9kZSogZW5kTm9kZSwgTm9kZSogcmVmTm9kZSk7CiAKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysr
IFdlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwzMiArMzEsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW1vdmVD
U1NQcm9wZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChEb2N1bWVudCogZG9j
dW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIGRlY2wsIGludCBwcm9wZXJ0eSkKK1JlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZDo6UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKERvY3VtZW50KiBkb2N1
bWVudCwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIENTU1By
b3BlcnR5SUQgcHJvcGVydHkpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChkb2N1bWVudCkKLSAg
ICAsIG1fZGVjbChkZWNsLT5tYWtlTXV0YWJsZSgpKQorICAgICwgbV9zdHlsZShzdHlsZSkKICAg
ICAsIG1fcHJvcGVydHkocHJvcGVydHkpCiAgICAgLCBtX2ltcG9ydGFudChmYWxzZSkKIHsKLSAg
ICBBU1NFUlQobV9kZWNsKTsKKyAgICBBU1NFUlQobV9zdHlsZSk7CiB9CiAKIHZvaWQgUmVtb3Zl
Q1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBBU1NFUlQobV9kZWNsKTsKLQot
ICAgIG1fb2xkVmFsdWUgPSBtX2RlY2wtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0eSk7Ci0g
ICAgQVNTRVJUKCFtX29sZFZhbHVlLmlzTnVsbCgpKTsKLQotICAgIG1faW1wb3J0YW50ID0gbV9k
ZWNsLT5nZXRQcm9wZXJ0eVByaW9yaXR5KG1fcHJvcGVydHkpOwotICAgIG1fZGVjbC0+cmVtb3Zl
UHJvcGVydHkobV9wcm9wZXJ0eSk7CisgICAgbV9vbGRWYWx1ZSA9IG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUobV9wcm9wZXJ0eSk7CisgICAgbV9pbXBvcnRhbnQgPSBtX3N0eWxlLT5nZXRQcm9w
ZXJ0eVByaW9yaXR5KG1fcHJvcGVydHkpOworICAgIG1fc3R5bGUtPnJlbW92ZVByb3BlcnR5KG1f
cHJvcGVydHkpOwogfQogCiB2b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9VbmFwcGx5
KCkKIHsKLSAgICBBU1NFUlQobV9kZWNsKTsKLSAgICBBU1NFUlQoIW1fb2xkVmFsdWUuaXNOdWxs
KCkpOwotCi0gICAgbV9kZWNsLT5zZXRQcm9wZXJ0eShtX3Byb3BlcnR5LCBtX29sZFZhbHVlLCBt
X2ltcG9ydGFudCk7CisgICAgbV9zdHlsZS0+c2V0UHJvcGVydHkobV9wcm9wZXJ0eSwgbV9vbGRW
YWx1ZSwgbV9pbXBvcnRhbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCShyZXZpc2lvbiAzOTQy
NykKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsMjYgKzI3LDI1IEBACiAjZGVmaW5lIFJlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZF9oCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uOwotCiBjbGFzcyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZUNTU1Byb3Bl
cnR5Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIGludCBwcm9wZXJ0eSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVDU1NQ
cm9wZXJ0eUNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQoZG9jdW1lbnQsIHN0eWxlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBS
ZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwg
aW50IHByb3BlcnR5KTsKKyAgICBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoRG9jdW1lbnQqLCBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1VuYXBwbHkoKTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9k
ZWNsOwotICAgIGludCBtX3Byb3BlcnR5OworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gbV9zdHlsZTsKKyAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CiAgICAgU3Ry
aW5nIG1fb2xkVmFsdWU7CiAgICAgYm9vbCBtX2ltcG9ydGFudDsKIH07CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5
NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5oIgotCi0jaW5j
bHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlJlbW92ZU5vZGVBdHRy
aWJ1dGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlKQotICAgIDogU2ltcGxlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1l
bnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQotewotICAg
IEFTU0VSVChtX2VsZW1lbnQpOwotfQotCi12b2lkIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5k
Ojpkb0FwcGx5KCkKLXsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKLQotICAgIG1fb2xkVmFsdWUg
PSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShtX2F0dHJpYnV0ZSk7Ci0gICAgQVNTRVJUKCFtX29s
ZFZhbHVlLmlzTnVsbCgpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIG1fZWxl
bWVudC0+cmVtb3ZlQXR0cmlidXRlKG1fYXR0cmlidXRlLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09
IDApOwotfQotCi12b2lkIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kOjpkb1VuYXBwbHkoKQot
ewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIEFTU0VSVCghbV9vbGRWYWx1ZS5pc051bGwo
KSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJp
YnV0ZShtX2F0dHJpYnV0ZSwgbV9vbGRWYWx1ZS5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoZWMg
PT0gMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKy8qIGRlbGV0ZSB0aGlzIGZpbGUg
Ki8KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5o
CShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRl
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICsxIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZF9oCi0jZGVmaW5lIFJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kX2gKLQotI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCi0jaW5j
bHVkZSAiUXVhbGlmaWVkTmFtZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJl
bW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZD4g
Y3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVOb2Rl
QXR0cmlidXRlQ29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUpKTsKLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4s
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZG9B
cHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLQotICAgIFJlZlB0cjxFbGVt
ZW50PiBtX2VsZW1lbnQ7Ci0gICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJpYnV0ZTsKLSAgICBBdG9t
aWNTdHJpbmcgbV9vbGRWYWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kX2gKKyNlcnJvciBkZWxldGUgdGhpcyBm
aWxlCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5
NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMzMgKzMxLDM2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVtb3Zl
Tm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlQ2hp
bGQpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFuZChyZW1vdmVDaGlsZC0+ZG9jdW1lbnQoKSkKLSAg
ICAsIG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpCi0gICAgLCBtX3BhcmVudChtX3JlbW92ZUNo
aWxkLT5wYXJlbnROb2RlKCkpCi0gICAgLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hpbGQtPm5leHRT
aWJsaW5nKCkpCitSZW1vdmVOb2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoUGFzc1JlZlB0
cjxOb2RlPiBub2RlKQorICAgIDogU2ltcGxlRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSkK
KyAgICAsIG1fbm9kZShub2RlKQogewotICAgIEFTU0VSVChtX3BhcmVudCk7CisgICAgQVNTRVJU
KG1fbm9kZSk7CisgICAgQVNTRVJUKG1fbm9kZS0+cGFyZW50Tm9kZSgpKTsKIH0KIAogdm9pZCBS
ZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50KTsKLSAg
ICBBU1NFUlQobV9yZW1vdmVDaGlsZCk7CisgICAgTm9kZSogcGFyZW50ID0gbV9ub2RlLT5wYXJl
bnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIG1fcGFyZW50LT5yZW1vdmVDaGlsZChtX3JlbW92ZUNoaWxk
LmdldCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOworICAgIG1fcGFyZW50ID0gcGFyZW50
OworICAgIG1fcmVmQ2hpbGQgPSBtX25vZGUtPm5leHRTaWJsaW5nKCk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjOworICAgIG1fbm9kZS0+cmVtb3ZlKGVjKTsKIH0KIAogdm9pZCBSZW1vdmVOb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBBU1NFUlQobV9wYXJlbnQpOwotICAgIEFTU0VS
VChtX3JlbW92ZUNoaWxkKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFyZW50ID0gbV9wYXJlbnQucmVs
ZWFzZSgpOworICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZCA9IG1fcmVmQ2hpbGQucmVsZWFzZSgp
OworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBtX3BhcmVudC0+aW5zZXJ0QmVmb3JlKG1fcmVtb3ZlQ2hpbGQuZ2V0KCks
IG1fcmVmQ2hpbGQuZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYzsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX25vZGUuZ2V0KCksIHJlZkNo
aWxkLmdldCgpLCBlYyk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2Rl
Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFu
ZC5oCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBS
ZWZQdHI8Tm9kZT4gbV9yZW1vdmVDaGlsZDsKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAg
IFJlZlB0cjxOb2RlPiBtX3BhcmVudDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZWZDaGlsZDsgICAg
CiB9OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDkgKzM5LDE1IEBAIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
OjpSZW0KIAogdm9pZCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6ZG9BcHBs
eSgpCiB7Ci0gICAgd2hpbGUgKE5vZGUqIGN1cnIgPSBtX25vZGUtPmZpcnN0Q2hpbGQoKSkgewot
ICAgICAgICByZW1vdmVOb2RlKGN1cnIpOwotICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGN1cnIs
IG1fbm9kZS5nZXQoKSk7CisgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IGNoaWxkcmVuOworICAg
IGZvciAoTm9kZSogY2hpbGQgPSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisK
KyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuW2ldLmdl
dCgpOworICAgICAgICByZW1vdmVOb2RlKGNoaWxkKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9y
ZShjaGlsZCwgbV9ub2RlLmdldCgpKTsKICAgICB9CiAgICAgcmVtb3ZlTm9kZShtX25vZGUuZ2V0
KCkpOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRl
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDM1ICszMiwyNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZDo6U2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCAKLSAgICAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQotICAgIDogU2ltcGxlRWRp
dENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRy
aWJ1dGUoYXR0cmlidXRlKSwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIDogU2ltcGxl
RWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50
KQorICAgICwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsK
ICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwog
fQogCiB2b2lkIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBBU1NF
UlQobV9lbGVtZW50KTsKLSAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgbV9vbGRWYWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKG1fYXR0cmlidXRlKTsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX2F0dHJpYnV0
ZSwgbV92YWx1ZS5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgbV9lbGVt
ZW50LT5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGUsIG1fdmFsdWUpOwogfQogCiB2b2lkIFNldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQp
OwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKG1fb2xkVmFsdWUuaXNOdWxs
KCkpCi0gICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlKG1fYXR0cmlidXRlLCBlYyk7
Ci0gICAgZWxzZQotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX2F0dHJpYnV0ZSwg
bV9vbGRWYWx1ZS5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgbV9lbGVt
ZW50LT5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGUsIG1fb2xkVmFsdWUpOworICAgIEF0b21pY1N0
cmluZ0ltcGwqIG51bGxTdHJpbmcgPSAwOworICAgIG1fb2xkVmFsdWUgPSBudWxsU3RyaW5nOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZXRO
b2RlQXR0cmlidXRlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZXRO
b2RlQXR0cmlidXRlQ29tbWFuZC5oCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1h
bmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChQYXNzUmVm
UHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZG9VbmFwcGx5KCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNTkgKzMyLDYwIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFNwbGl0RWxlbWVudENvbW1hbmQ6OlNwbGl0RWxlbWVudENvbW1hbmQo
UGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzUmVmUHRyPE5vZGU+IGF0Q2hpbGQpCi0g
ICAgOiBTaW1wbGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKSwgbV9lbGVtZW50Mihl
bGVtZW50KSwgbV9hdENoaWxkKGF0Q2hpbGQpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChlbGVt
ZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9lbGVtZW50MihlbGVtZW50KQorICAgICwgbV9hdENo
aWxkKGF0Q2hpbGQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudDIpOwogICAgIEFTU0VSVChtX2F0
Q2hpbGQpOworICAgIEFTU0VSVChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSA9PSBtX2VsZW1lbnQy
KTsKIH0KIAogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBBU1NF
UlQobV9lbGVtZW50Mik7Ci0gICAgQVNTRVJUKG1fYXRDaGlsZCk7Ci0gICAgQVNTRVJUKG1fYXRD
aGlsZC0+cGFyZW50Tm9kZSgpID09IG1fZWxlbWVudDIpOworICAgIFJlZlB0cjxFbGVtZW50PiBw
cmVmaXhFbGVtZW50ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFbGVtZW50PihtX2VsZW1lbnQyLT5j
bG9uZU5vZGUoZmFsc2UpKTsKKworICAgIGlmIChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSAhPSBt
X2VsZW1lbnQyKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4g
Y2hpbGRyZW47CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgp
OyBub2RlICE9IG1fYXRDaGlsZDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAg
IGNoaWxkcmVuLmFwcGVuZChub2RlKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0g
ICAgaWYgKCFtX2VsZW1lbnQxKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBvbmx5IGlmIG5lZWRlZC4K
LSAgICAgICAgLy8gaWYgcmVhcHBseWluZywgdGhpcyBvYmplY3Qgd2lsbCBhbHJlYWR5IGV4aXN0
LgotICAgICAgICBtX2VsZW1lbnQxID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFbGVtZW50PihtX2Vs
ZW1lbnQyLT5jbG9uZU5vZGUoZmFsc2UpKTsKLSAgICAgICAgQVNTRVJUKG1fZWxlbWVudDEpOwot
ICAgIH0KLQotICAgIG1fZWxlbWVudDItPnBhcmVudCgpLT5pbnNlcnRCZWZvcmUobV9lbGVtZW50
MS5nZXQoKSwgbV9lbGVtZW50Mi5nZXQoKSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKLSAg
ICAKLSAgICAvLyBCYWlsIGlmIHdlIHdlcmUgYXNrZWQgdG8gc3BsaXQgYXQgYSBib2d1cyBjaGls
ZCwgdG8gYXZvaWQgaGFuZ2luZyBiZWxvdy4KLSAgICBpZiAoIW1fYXRDaGlsZCB8fCBtX2F0Q2hp
bGQtPnBhcmVudE5vZGUoKSAhPSBtX2VsZW1lbnQyKQorICAgIE5vZGUqIHBhcmVudCA9IG1fZWxl
bWVudDItPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHdoaWxlIChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkgIT0gbV9hdENoaWxkKSB7
Ci0gICAgICAgIEFTU0VSVChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkpOwotICAgICAgICBtX2Vs
ZW1lbnQxLT5hcHBlbmRDaGlsZChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCksIGVjKTsKLSAgICAg
ICAgQVNTRVJUKGVjID09IDApOwotICAgIH0KKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShwcmVm
aXhFbGVtZW50LmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm47CisgICAgbV9lbGVtZW50MSA9IHByZWZpeEVsZW1lbnQucmVsZWFzZSgpOwor
CisgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZWxlbWVudDEtPmFwcGVuZENoaWxkKGNoaWxk
cmVuW2ldLCBlYyk7CiB9CiAKIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkK
IHsKLSAgICBBU1NFUlQobV9lbGVtZW50MSk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAg
IEFTU0VSVChtX2F0Q2hpbGQpOworICAgIGlmICghbV9lbGVtZW50MSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IGNoaWxkcmVuOworICAgIGZvciAoTm9kZSog
bm9kZSA9IG1fZWxlbWVudDEtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChub2RlKTsKIAotICAgIEFTU0VSVCht
X2VsZW1lbnQxLT5uZXh0U2libGluZygpID09IG1fZWxlbWVudDIpOwotICAgIEFTU0VSVChtX2Vs
ZW1lbnQyLT5maXJzdENoaWxkKCkgJiYgbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpID09IG1fYXRD
aGlsZCk7CisgICAgUmVmUHRyPE5vZGU+IHJlZkNoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGls
ZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICB3aGlsZSAobV9lbGVtZW50
MS0+bGFzdENoaWxkKCkpIHsKLSAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKG1fZWxl
bWVudDEtPmxhc3RDaGlsZCgpLCBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCksIGVjKTsKLSAgICAg
ICAgQVNTRVJUKGVjID09IDApOwotICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9l
bGVtZW50Mi0+aW5zZXJ0QmVmb3JlKGNoaWxkcmVuW2ldLmdldCgpLCByZWZDaGlsZC5nZXQoKSwg
ZWMpOwogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX2VsZW1l
bnQxLmdldCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOworICAgIG1fZWxlbWVudDEtPnJl
bW92ZShlYyk7CisgICAgbV9lbGVtZW50MSA9IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNp
b24gMzk0MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw1OCArMzMsNjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4
dD4gdGV4dCwgaW50IG9mZnNldCkKLSAgICA6IFNpbXBsZUVkaXRDb21tYW5kKHRleHQtPmRvY3Vt
ZW50KCkpLCBtX3RleHQyKHRleHQpLCBtX29mZnNldChvZmZzZXQpCisgICAgOiBTaW1wbGVFZGl0
Q29tbWFuZCh0ZXh0LT5kb2N1bWVudCgpKQorICAgICwgbV90ZXh0Mih0ZXh0KQorICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQogeworICAgIC8vIE5PVEU6IFZhcmlvdXMgY2FsbGVycyByZWx5IG9uIHRo
ZSBmYWN0IHRoYXQgdGhlIG9yaWdpbmFsIG5vZGUgYmVjb21lcworICAgIC8vIHRoZSBzZWNvbmQg
bm9kZSAoaS5lLiB0aGUgbmV3IG5vZGUgaXMgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBleGlzdGluZyBv
bmUpLgorICAgIC8vIFRoYXQgaXMgbm90IGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeSAoaS5lLiBp
dCBjb3VsZCBiZSByZS1jb2RlZCksIGJ1dAorICAgIC8vIHJhdGhlciBpcyBiYXNlZCBvbiBob3cg
dGhpcyBjb2RlIGhhcHBlbnMgdG8gd29yay4KICAgICBBU1NFUlQobV90ZXh0Mik7CiAgICAgQVNT
RVJUKG1fdGV4dDItPmxlbmd0aCgpID4gMCk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID4gMCk7Cisg
ICAgQVNTRVJUKG1fb2Zmc2V0IDwgbV90ZXh0Mi0+bGVuZ3RoKCkpOwogfQogCiB2b2lkIFNwbGl0
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBBU1NFUlQobV90ZXh0Mik7Ci0gICAg
QVNTRVJUKG1fb2Zmc2V0ID4gMCk7Ci0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAotICAg
IC8vIE5PVEU6IFZhcmlvdXMgY2FsbGVycyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlIG9yaWdp
bmFsIG5vZGUgYmVjb21lcwotICAgIC8vIHRoZSBzZWNvbmQgbm9kZSAoaS5lLiB0aGUgbmV3IG5v
ZGUgaXMgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBleGlzdGluZyBvbmUpLgotICAgIC8vIFRoYXQgaXMg
bm90IGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeSAoaS5lLiBpdCBjb3VsZCBiZSByZS1jb2RlZCks
IGJ1dAotICAgIC8vIHJhdGhlciBpcyBiYXNlZCBvbiBob3cgdGhpcyBjb2RlIGhhcHBlbnMgdG8g
d29yay4KLSAgICBpZiAoIW1fdGV4dDEpIHsKLSAgICAgICAgLy8gY3JlYXRlIG9ubHkgaWYgbmVl
ZGVkLgotICAgICAgICAvLyBpZiByZWFwcGx5aW5nLCB0aGlzIG9iamVjdCB3aWxsIGFscmVhZHkg
ZXhpc3QuCi0gICAgICAgIG1fdGV4dDEgPSBkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShtX3Rl
eHQyLT5zdWJzdHJpbmdEYXRhKDAsIG1fb2Zmc2V0LCBlYykpOwotICAgICAgICBBU1NFUlQoZWMg
PT0gMCk7Ci0gICAgICAgIEFTU0VSVChtX3RleHQxKTsKLSAgICB9CisgICAgU3RyaW5nIHByZWZp
eFRleHQgPSBtX3RleHQyLT5zdWJzdHJpbmdEYXRhKDAsIG1fb2Zmc2V0LCBlYyk7CisgICAgaWYg
KHByZWZpeFRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGV4
dD4gcHJlZml4VGV4dE5vZGUgPSBuZXcgVGV4dChkb2N1bWVudCgpLCBwcmVmaXhUZXh0KTsKKyAg
ICBBU1NFUlQocHJlZml4VGV4dE5vZGUpOworICAgIGRvY3VtZW50KCktPmNvcHlNYXJrZXJzKG1f
dGV4dDIuZ2V0KCksIDAsIG1fb2Zmc2V0LCBwcmVmaXhUZXh0Tm9kZS5nZXQoKSwgMCk7CisKKyAg
ICBOb2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShwcmVmaXhUZXh0Tm9k
ZS5nZXQoKSwgbV90ZXh0Mi5nZXQoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgZG9jdW1lbnQoKS0+Y29weU1hcmtlcnMobV90ZXh0Mi5nZXQoKSwgMCwgbV9vZmZz
ZXQsIG1fdGV4dDEuZ2V0KCksIDApOwogICAgIG1fdGV4dDItPmRlbGV0ZURhdGEoMCwgbV9vZmZz
ZXQsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7Ci0KLSAgICBtX3RleHQyLT5wYXJlbnROb2Rl
KCktPmluc2VydEJlZm9yZShtX3RleHQxLmdldCgpLCBtX3RleHQyLmdldCgpLCBlYyk7Ci0gICAg
QVNTRVJUKGVjID09IDApOwotICAgICAgICAKLSAgICBBU1NFUlQobV90ZXh0Mi0+cHJldmlvdXNT
aWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7Ci0gICAgQVNTRVJUKG1fdGV4dDItPnByZXZpb3VzU2li
bGluZygpID09IG1fdGV4dDEpOworICAgIG1fdGV4dDEgPSBwcmVmaXhUZXh0Tm9kZS5yZWxlYXNl
KCk7CiB9CiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAg
QVNTRVJUKG1fdGV4dDEpOwotICAgIEFTU0VSVChtX3RleHQyKTsKLSAgICBBU1NFUlQobV90ZXh0
MS0+bmV4dFNpYmxpbmcoKSA9PSBtX3RleHQyKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBtX3RleHQxLT5kYXRhKCksIGVj
KTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgaWYgKCFtX3RleHQxKQorICAgICAgICByZXR1
cm47CiAKLSAgICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBtX29m
ZnNldCwgbV90ZXh0Mi5nZXQoKSwgMCk7CisgICAgQVNTRVJUKG1fdGV4dDEtPmRvY3VtZW50KCkg
PT0gZG9jdW1lbnQoKSk7CiAKLSAgICBtX3RleHQyLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxk
KG1fdGV4dDEuZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgUmVmUHRyPFRl
eHQ+IHByZWZpeFRleHROb2RlID0gbV90ZXh0MS5yZWxlYXNlKCk7CisgICAgU3RyaW5nIHByZWZp
eFRleHQgPSBwcmVmaXhUZXh0Tm9kZS0+ZGF0YSgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0LCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX29mZnNldCA9IG1fdGV4dDEtPmxlbmd0aCgp
OworICAgIGRvY3VtZW50KCktPmNvcHlNYXJrZXJzKHByZWZpeFRleHROb2RlLmdldCgpLCAwLCBw
cmVmaXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQyLmdldCgpLCAwKTsKKyAgICBwcmVmaXhUZXh0Tm9k
ZS0+cmVtb3ZlKGVjKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRD
b21tYW5kLmNwcAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDYsMTQgKzQ2LDIwIEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWEKICAgICBBU1NFUlQobV9vZmZzZXQgPiAwKTsKIAogICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0
LmdldCgpLCBtX29mZnNldCk7Ci0gICAgCi0gICAgTm9kZSAqcGFyZW50Tm9kZSA9IG1fdGV4dC0+
cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50Tm9kZS0+cmVuZGVyZXIoKSB8fCAhcGFyZW50
Tm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkgewotICAgICAgICB3cmFwQ29udGVudHNJbkR1
bW15U3BhbihzdGF0aWNfY2FzdDxFbGVtZW50ICo+KHBhcmVudE5vZGUpKTsKKworICAgIE5vZGUq
IHBhcmVudE5vZGUgPSBtX3RleHQtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudE5vZGUg
fHwgIXBhcmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudE5vZGUtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFwYXJlbnRSZW5kZXJlciB8fCAhcGFyZW50UmVuZGVyZXItPmlzSW5saW5lKCkpIHsK
KyAgICAgICAgd3JhcENvbnRlbnRzSW5EdW1teVNwYW4oc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHBh
cmVudE5vZGUpKTsKICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgaWYgKCFwYXJlbnROb2RlIHx8ICFwYXJlbnROb2RlLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3BsaXRFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQgKj4ocGFyZW50Tm9kZSksIG1fdGV4dC5nZXQoKSk7CisgICAgc3BsaXRF
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihwYXJlbnROb2RlKSwgbV90ZXh0LmdldCgpKTsK
IH0KIAogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5NDI3KQorKysgV2ViQ29yZS9lZGl0aW5nL1dy
YXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsNDYgKzMyLDUwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZDo6V3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kKFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCkKLSAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRv
Y3VtZW50KCkpLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGVs
ZW1lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBBU1NF
UlQobV9lbGVtZW50KTsKIH0KIAogdm9pZCBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6
OmRvQXBwbHkoKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOworICAgIFZlY3RvcjxSZWZQdHI8
Tm9kZT4gPiBjaGlsZHJlbjsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9lbGVtZW50LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBj
aGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzcGFuID0g
Y3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKKyAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKIAotICAgIGlmICghbV9kdW1teVNwYW4pCi0gICAgICAgIG1fZHVtbXlTcGFuID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRWxlbWVudD4oY3JlYXRlU3R5bGVTcGFuRWxlbWVudChk
b2N1bWVudCgpKSk7Ci0gCi0gICAgd2hpbGUgKG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0g
ICAgICAgIG1fZHVtbXlTcGFuLT5hcHBlbmRDaGlsZChtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKSwg
ZWMpOwotICAgICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgfQorICAgIHNpemVfdCBzaXplID0g
Y2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBzcGFuLT5hcHBlbmRDaGlsZChjaGlsZHJlbltpXS5yZWxlYXNlKCksIGVjKTsKIAot
ICAgIG1fZWxlbWVudC0+YXBwZW5kQ2hpbGQobV9kdW1teVNwYW4uZ2V0KCksIGVjKTsKLSAgICBB
U1NFUlQoZWMgPT0gMCk7CisgICAgbV9lbGVtZW50LT5hcHBlbmRDaGlsZChzcGFuLmdldCgpLCBl
Yyk7CisKKyAgICBtX2R1bW15U3BhbiA9IHNwYW4ucmVsZWFzZSgpOwogfQogCiB2b2lkIFdyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9l
bGVtZW50KTsKLSAgICBBU1NFUlQobV9kdW1teVNwYW4pOwogCi0gICAgQVNTRVJUKG1fZWxlbWVu
dC0+Zmlyc3RDaGlsZCgpID09IG1fZHVtbXlTcGFuKTsKLSAgICBBU1NFUlQoIW1fZWxlbWVudC0+
Zmlyc3RDaGlsZCgpLT5uZXh0U2libGluZygpKTsKKyAgICBpZiAoIW1fZHVtbXlTcGFuKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gY2hpbGRyZW47CisgICAg
Zm9yIChOb2RlKiBjaGlsZCA9IG1fZHVtbXlTcGFuLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICB3aGlsZSAobV9kdW1teVNwYW4t
PmZpcnN0Q2hpbGQoKSkgewotICAgICAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxkKG1fZHVtbXlT
cGFuLT5maXJzdENoaWxkKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKGVjID09IDApOwotICAgIH0K
KyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9lbGVtZW50LT5hcHBlbmRDaGlsZChjaGlsZHJl
bltpXS5yZWxlYXNlKCksIGVjKTsKIAotICAgIG1fZWxlbWVudC0+cmVtb3ZlQ2hpbGQobV9kdW1t
eVNwYW4uZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgbV9kdW1teVNwYW4t
PnJlbW92ZShlYyk7CisgICAgbV9kdW1teVNwYW4gPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDM5NDI3KQorKysg
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDE2
ICsyOTMsMTYgQEAgVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmbwogLy8g
V2hldGhlciBvciBub3QgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbm9kZSB3aWxsIGNv
bGxhcHNlIG9udG8gdGhlIHNhbWUgbGluZSBhcyBpdC4KIGJvb2wgaXNCbG9jayhjb25zdCBOb2Rl
KiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgIW5vZGUt
PnJlbmRlcmVyKCktPmlzSW5saW5lKCk7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgIW5vZGUtPnJlbmRlcmVyKCktPmlzSW5s
aW5lKCk7CiB9CiAKIC8vIEZJWE1FOiBEZXBsb3kgdGhpcyBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3
aGVyZSBlbmNsb3NpbmdCbG9ja0Zsb3cvZW5jbG9zaW5nQmxvY2tGbG93T3JUYWJsZUVsZW1lbnQg
YXJlIHVzZWQuCiAvLyBGSVhNRTogUGFzcyBhIHBvc2l0aW9uIHRvIHRoaXMgZnVuY3Rpb24uICBU
aGUgZW5jbG9zaW5nIGJsb2NrIG9mIFt0YWJsZSwgeF0gZm9yIGV4YW1wbGUsIHNob3VsZCBiZSB0
aGUgCiAvLyBibG9jayB0aGF0IGNvbnRhaW5zIHRoZSB0YWJsZSBhbmQgbm90IHRoZSB0YWJsZSwg
YW5kIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZSBvbmx5IG9uZSByZXNwb25zaWJsZSBmb3Ig
CiAvLyBrbm93aW5nIGFib3V0IHRoZXNlIGtpbmRzIG9mIHNwZWNpYWwgY2FzZXMuCi1Ob2RlKiBl
bmNsb3NpbmdCbG9jayhOb2RlKiBub2RlKQorRWxlbWVudCogZW5jbG9zaW5nQmxvY2soTm9kZSog
bm9kZSkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTm9kZU9mVHlwZShQb3NpdGlvbihub2RlLCAw
KSwgJmlzQmxvY2spOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5n
Tm9kZU9mVHlwZShQb3NpdGlvbihub2RlLCAwKSwgaXNCbG9jaykpOwogfQogCiBQb3NpdGlvbiBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTYxNCw5ICs2
MTQsOSBAQCBOb2RlKiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQCiAgICAgcmV0
dXJuIGhpZ2hlc3Q7CiB9CiAKLU5vZGUqIGVuY2xvc2luZ1RhYmxlQ2VsbChjb25zdCBQb3NpdGlv
biYgcCkKK0VsZW1lbnQqIGVuY2xvc2luZ1RhYmxlQ2VsbChjb25zdCBQb3NpdGlvbiYgcCkKIHsK
LSAgICByZXR1cm4gZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAmaXNUYWJsZUNlbGwpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShwLCBpc1RhYmxl
Q2VsbCkpOwogfQogCiBOb2RlKiBlbmNsb3NpbmdBbmNob3JFbGVtZW50KGNvbnN0IFBvc2l0aW9u
JiBwKQpAQCAtNjMwLDcgKzYzMCw3IEBAIE5vZGUqIGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoY29u
c3QgUG9zaXQKICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSogZW5jbG9zaW5nTGlzdChOb2Rl
KiBub2RlKQorRWxlbWVudCogZW5jbG9zaW5nTGlzdChOb2RlKiBub2RlKQogewogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02MzksNyArNjM5LDcgQEAgTm9kZSogZW5jbG9z
aW5nTGlzdChOb2RlKiBub2RlKQogICAgIAogICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZSh1bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAgICByZXR1cm4g
bjsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAg
IGlmIChuID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03MTgsMTMg
KzcxOCwxNCBAQCBOb2RlKiBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0Q2hpbGQoTm9kZSogCiAgICAg
cmV0dXJuIGxpc3ROb2RlOwogfQogCi1Ob2RlKiBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KE5vZGUq
IG5vZGUpCitFbGVtZW50KiBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiB7Ci0g
ICAgTm9kZSogbGlzdE5vZGUgPSAwOwotICAgIE5vZGUqIG5leHROb2RlID0gbm9kZTsKLSAgICB3
aGlsZSAoKG5leHROb2RlID0gZW5jbG9zaW5nTGlzdChuZXh0Tm9kZSkpKQotICAgICAgICBsaXN0
Tm9kZSA9IG5leHROb2RlOwotICAgIHJldHVybiBsaXN0Tm9kZTsKKyAgICBFbGVtZW50KiBsaXN0
ID0gZW5jbG9zaW5nTGlzdChub2RlKTsKKyAgICBpZiAoIWxpc3QpCisgICAgICAgIHJldHVybiAw
OworICAgIHdoaWxlIChFbGVtZW50KiBuZXh0TGlzdCA9IGVuY2xvc2luZ0xpc3QobGlzdCkpCisg
ICAgICAgIGxpc3QgPSBuZXh0TGlzdDsKKyAgICByZXR1cm4gbGlzdDsKIH0KIAogTm9kZSogaGln
aGVzdEFuY2VzdG9yKE5vZGUqIG5vZGUpCkBAIC03NDgsNiArNzQ5LDkgQEAgYm9vbCBpc1RhYmxl
RWxlbWVudChOb2RlKiBuKQogCiBib29sIGlzVGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUpCiB7
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyKQogICAgICAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZSh0aFRhZyk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gMzk0
MjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCBib29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpCiBi
b29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogRWxlbWVudCog
ZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgaXNCbG9jayhj
b25zdCBOb2RlKik7Ci1Ob2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKik7CitFbGVtZW50KiBlbmNs
b3NpbmdCbG9jayhOb2RlKik7CiAKIFN0cmluZyBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3Bh
Y2UoY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCk7CiBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5n
U3BhY2VTdHJpbmcoKTsKQEAgLTExNCwxMiArMTE0LDEyIEBAIE5vZGUqIGlzRmlyc3RQb3NpdGlv
bkFmdGVyVGFibGUoY29uc3QgVmkKIE5vZGUqIGVuY2xvc2luZ05vZGVXaXRoVGFnKGNvbnN0IFBv
c2l0aW9uJiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlw
ZShjb25zdCBQb3NpdGlvbiYsIGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE5vZGUqKSwgYm9v
bCBvbmx5UmV0dXJuRWRpdGFibGVOb2RlcyA9IHRydWUpOwogTm9kZSogaGlnaGVzdEVuY2xvc2lu
Z05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBO
b2RlKikpOwotTm9kZSogZW5jbG9zaW5nVGFibGVDZWxsKGNvbnN0IFBvc2l0aW9uJik7CitFbGVt
ZW50KiBlbmNsb3NpbmdUYWJsZUNlbGwoY29uc3QgUG9zaXRpb24mKTsKIE5vZGUqIGVuY2xvc2lu
Z0VtcHR5TGlzdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBOb2RlKiBlbmNsb3NpbmdB
bmNob3JFbGVtZW50KGNvbnN0IFBvc2l0aW9uJik7CiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSop
OwotTm9kZSogZW5jbG9zaW5nTGlzdChOb2RlKik7Ci1Ob2RlKiBvdXRlcm1vc3RFbmNsb3NpbmdM
aXN0KE5vZGUqKTsKK0VsZW1lbnQqIGVuY2xvc2luZ0xpc3QoTm9kZSopOworRWxlbWVudCogb3V0
ZXJtb3N0RW5jbG9zaW5nTGlzdChOb2RlKik7CiBOb2RlKiBlbmNsb3NpbmdMaXN0Q2hpbGQoTm9k
ZSopOwogTm9kZSogaGlnaGVzdEFuY2VzdG9yKE5vZGUqKTsKIGJvb2wgaXNUYWJsZUVsZW1lbnQo
Tm9kZSopOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENh
aXJvLmNwcAkocmV2aXNpb24gMzk0MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw5ICsxOTMsMTAgQEAgRmxv
YXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tl
Qm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsKICAgICBjYWlyb190
KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOwotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjcik7
Ci0gICAgaWYgKGFwcGxpZXIpCisgICAgaWYgKGFwcGxpZXIpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGdjKGNyKTsKICAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmdjKTsKKyAgICB9
CiAKICAgICBkb3VibGUgeDAsIHgxLCB5MCwgeTE7CiAgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMo
Y3IsICZ4MCwgJnkwLCAmeDEsICZ5MSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXRoQ0cuY3BwCShyZXZpc2lvbiAzOTQyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMzEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgc2l6ZV90IHB1dEJ5dGVzTm93aGVyZSh2b2lkKiwg
Y29uc3Qgdm9pZCosIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0
YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlU2NyYXRjaENvbnRleHQoKQoreworICAgIENHRGF0YUNv
bnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsgcHV0Qnl0ZXNOb3doZXJlLCAwIH07CisgICAg
Q0dEYXRhQ29uc3VtZXJSZWYgY29uc3VtZXIgPSBDR0RhdGFDb25zdW1lckNyZWF0ZSgwLCAmY2Fs
bGJhY2tzKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHUERGQ29udGV4dENyZWF0ZShj
b25zdW1lciwgMCwgMCk7CisgICAgQ0dEYXRhQ29uc3VtZXJSZWxlYXNlKGNvbnN1bWVyKTsKKwor
ICAgIENHRmxvYXQgYmxhY2tbNF0gPSB7IDAsIDAsIDAsIDEgfTsKKyAgICBDR0NvbnRleHRTZXRG
aWxsQ29sb3IoY29udGV4dCwgYmxhY2spOworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yKGNv
bnRleHQsIGJsYWNrKTsKKworICAgIHJldHVybiBjb250ZXh0OworfQorCitzdGF0aWMgaW5saW5l
IENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCit7CisgICAgc3RhdGljIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gY3JlYXRlU2NyYXRjaENvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dDsK
K30KKwogUGF0aDo6UGF0aCgpCiAgICAgOiBtX3BhdGgoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKQog
ewpAQCAtNjQsMjYgKzg5LDYgQEAgUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90
aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVT
Y3JhdGNoQ29udGV4dCgpCi17Ci0gICAgQ0ZNdXRhYmxlRGF0YVJlZiBlbXB0eSA9IENGRGF0YUNy
ZWF0ZU11dGFibGUoTlVMTCwgMCk7Ci0gICAgQ0dEYXRhQ29uc3VtZXJSZWYgY29uc3VtZXIgPSBD
R0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEoZW1wdHkpOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gQ0dQREZDb250ZXh0Q3JlYXRlKGNvbnN1bWVyLCBOVUxMLCBOVUxMKTsKLSAg
ICBDR0RhdGFDb25zdW1lclJlbGVhc2UoY29uc3VtZXIpOwotICAgIENGUmVsZWFzZShlbXB0eSk7
Ci0KLSAgICBDR0Zsb2F0IGJsYWNrWzRdID0gezAsIDAsIDAsIDF9OwotICAgIENHQ29udGV4dFNl
dEZpbGxDb2xvcihjb250ZXh0UmVmLCBibGFjayk7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29s
b3IoY29udGV4dFJlZiwgYmxhY2spOwotICAgIHJldHVybiBjb250ZXh0UmVmOwotfQotCi1zdGF0
aWMgaW5saW5lIENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCi17Ci0gICAgc3RhdGljIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gY3JlYXRlU2NyYXRjaENvbnRleHQoKTsKLSAgICByZXR1cm4g
Y29udGV4dDsKLX0KLQogc3RhdGljIHZvaWQgY29weUNsb3NpbmdTdWJwYXRoc0FwcGxpZXJGdW5j
dGlvbih2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50KiBlbGVtZW50KQogewogICAgIENH
TXV0YWJsZVBhdGhSZWYgcGF0aCA9IHN0YXRpY19jYXN0PENHTXV0YWJsZVBhdGhSZWY+KGluZm8p
OwpAQCAtMTUyLDE2ICsxNTcsMTMgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dChTdHJvawogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBn
Yyhjb250ZXh0KTsKLSAgICBpZiAoYXBwbGllcikKLSAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5
bGUoJmdjKTsKKyAgICBpZiAoYXBwbGllcikgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgICAgICBhcHBsaWVyLT5zdHJva2VTdHlsZSgmZ3Jh
cGhpY3NDb250ZXh0KTsKKyAgICB9CiAKICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJv
a2VkUGF0aChjb250ZXh0KTsKLSAgICBpZiAoQ0dDb250ZXh0SXNQYXRoRW1wdHkoY29udGV4dCkp
IHsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotICAgIH0KLSAgICBDR1JlY3QgYm94ID0gQ0dDb250ZXh0R2V0UGF0
aEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIENHUmVjdCBib3ggPSBDR0NvbnRleHRJc1BhdGhF
bXB0eShjb250ZXh0KSA/IENHUmVjdFplcm8gOiBDR0NvbnRleHRHZXRQYXRoQm91bmRpbmdCb3go
Y29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIHJl
dHVybiBib3g7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>