<?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>221107</bug_id>
          
          <creation_ts>2021-01-28 14:58:44 -0800</creation_ts>
          <short_desc>JavaScriptCore should build with ARC enabled</short_desc>
          <delta_ts>2025-02-24 11:43:42 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=184789</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=220956</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=221108</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=252595</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=251797</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>186227</dependson>
    
    <dependson>186301</dependson>
    
    <dependson>186436</dependson>
    
    <dependson>186961</dependson>
    
    <dependson>186973</dependson>
    
    <dependson>188245</dependson>
          <blocked>221117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1723511</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-01-28 14:58:44 -0800</bug_when>
    <thetext>JavaScriptCore should build with ARC enabled.

This bug tracks enabling ARC in JavaScriptCore.
https://bugs.webkit.org/process_bug.cgi?id=216318&amp;addselfcc=1&amp;token=1611874581-tQSFTTFT7FxskGO0_mQG5R26FkHbx02V-VcyNfWsbsw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723513</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-01-28 15:01:37 -0800</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #0)
&gt; https://bugs.webkit.org/process_bug.
&gt; cgi?id=216318&amp;addselfcc=1&amp;token=1611874581-tQSFTTFT7FxskGO0_mQG5R26FkHbx02V-
&gt; VcyNfWsbsw

Oops, accidental drag-and-drop of a link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723514</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-28 15:02:08 -0800</bug_when>
    <thetext>&lt;rdar://problem/73726197&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723568</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-28 17:57:18 -0800</bug_when>
    <thetext>I have a patch that does most of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723754</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-29 09:41:35 -0800</bug_when>
    <thetext>You don’t have to wait for my patch; nothing special in it, and it’s not tested yet. But I will upload soon in case it’s helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723762</commentid>
    <comment_count>5</comment_count>
      <attachid>418743</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-29 10:02:15 -0800</bug_when>
    <thetext>Created attachment 418743
First cut; compiles locally, not tested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723781</commentid>
    <comment_count>6</comment_count>
      <attachid>418743</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-29 10:34:03 -0800</bug_when>
    <thetext>Comment on attachment 418743
First cut; compiles locally, not tested

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

&gt; Source/JavaScriptCore/inspector/remote/cocoa/RemoteInspectorXPCConnection.h:68
&gt; +    OSObjectPtr&lt;xpc_connection_t&gt; m_connection;
&gt; +    OSObjectPtr&lt;dispatch_queue_t&gt; m_queue;

Since this header can be included in non-Objective-C .cpp files, I think the safer idiom is to use OSObjectPtr. If we only included this header in Objective-C++ source files, we could instead just rely on ARC directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932812</commentid>
    <comment_count>7</comment_count>
      <attachid>464950</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-10 16:16:57 -0800</bug_when>
    <thetext>Created attachment 464950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932824</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-10 16:43:50 -0800</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #7)
&gt; Created attachment 464950 [details]
&gt; Patch

This is still a WIP patch.

The following crashes on ASan builds:

$ ./Tools/Scripts/run-javascriptcore-tests --release --no-build --testapi

Like this:

=================================================================
==78457==ERROR: AddressSanitizer: heap-use-after-free on address 0x61100001f160 at pc 0x0001199bb327 bp 0x7ff7b75429e0 sp 0x7ff7b75429d8
READ of size 8 at 0x61100001f160 thread T0
    #0 0x1199bb326 in JSC::WeakImpl::setState(JSC::WeakImpl::State) WeakImpl.h:91
    #1 0x11998cf4d in JSC::WeakSet::deallocate(JSC::WeakImpl*) WeakSet.h:113
    #2 0x11b23a4b8 in JSC::weakClearSlowCase(JSC::WeakImpl*) Weak.cpp:36
    #3 0x119aee841 in JSC::Weak&lt;JSC::JSObject&gt;::clear() Weak.h:86
    #4 0x119aee818 in JSC::Weak&lt;JSC::JSObject&gt;::~Weak() Weak.h:63
    #5 0x119ab8558 in JSC::Weak&lt;JSC::JSObject&gt;::~Weak() Weak.h:62
    #6 0x119ab915a in -[JSObjCClassInfo .cxx_destruct] JSWrapperMap.mm:402
    #7 0x7ff81b89fd0d in object_cxxDestructFromClass(objc_object*, objc_class*)+0x52 (libobjc.A.dylib:x86_64+0x10d0d)
    #8 0x7ff81b89847d in objc_destructInstance+0x5d (libobjc.A.dylib:x86_64+0x947d)
    #9 0x7ff81b89840e in _objc_rootDealloc+0x3d (libobjc.A.dylib:x86_64+0x940e)
    #10 0x119ab3b2e in -[JSObjCClassInfo dealloc] JSWrapperMap.mm:424
    #11 0x7ff81ba768f6 in cow_cleanup+0xa0 (CoreFoundation:x86_64+0x2d8f6)
    #12 0x7ff81ba76810 in -[__NSDictionaryM dealloc]+0x7f (CoreFoundation:x86_64+0x2d810)
    #13 0x7ff81b89c3a9 in AutoreleasePoolPage::releaseUntil(objc_object**)+0xa3 (libobjc.A.dylib:x86_64+0xd3a9)
    #14 0x7ff81b89924e in objc_autoreleasePoolPop+0xa7 (libobjc.A.dylib:x86_64+0xa24e)
    #15 0x108a13b8a in testToString() testapi.mm:2835
    #16 0x108a12a82 in testObjectiveCAPI testapi.mm:2858
    #17 0x1089e86ee in main testapi.c:1408
    #18 0x10da5852d in start+0x1cd (dyld:x86_64+0x552d)

0x61100001f160 is located 224 bytes inside of 256-byte region [0x61100001f080,0x61100001f180)
freed by thread T0 here:
    #0 0x108faaaf6 in __sanitizer_mz_free+0x86 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x47af6)
    #1 0x118900954 in bmalloc::DebugHeap::free(void*) DebugHeap.cpp:93
    #2 0x118901293 in pas_debug_heap_free DebugHeap.cpp:239
    #3 0x1188f985a in bmalloc_heap_config_specialized_try_deallocate_not_small_exclusive_segregated bmalloc_heap_config.c:43
    #4 0x11bbda288 in WTF::FastMalloc::free(void*) FastMalloc.h:252
    #5 0x11b2465f0 in JSC::WeakBlock::destroy(JSC::Heap&amp;, JSC::WeakBlock*) WeakBlock.cpp:49
    #6 0x11b121f81 in JSC::Heap::~Heap() Heap.cpp:431
    #7 0x11b123198 in JSC::Heap::~Heap() Heap.cpp:419
    #8 0x11c23b168 in JSC::VM::~VM() VM.cpp:462
    #9 0x11c23bff8 in JSC::VM::~VM() VM.cpp:398
    #10 0x119b443e6 in WTF::ThreadSafeRefCounted&lt;JSC::VM, (WTF::DestructionThread)0&gt;::deref() const::&apos;lambda&apos;()::operator()() const ThreadSafeRefCounted.h:115
    #11 0x119b277e3 in WTF::ThreadSafeRefCounted&lt;JSC::VM, (WTF::DestructionThread)0&gt;::deref() const ThreadSafeRefCounted.h:127
    #12 0x11b388520 in WTF::RefPtr&lt;JSC::VM, WTF::RawPtrTraits&lt;JSC::VM&gt;, WTF::DefaultRefDerefTraits&lt;JSC::VM&gt; &gt;::operator=(std::nullptr_t) RefPtr.h:170
    #13 0x11be53399 in JSC::JSLockHolder::~JSLockHolder() JSLock.cpp:73
    #14 0x11be534f8 in JSC::JSLockHolder::~JSLockHolder() JSLock.cpp:71
    #15 0x119b27656 in JSContextGroupRelease JSContextRef.cpp:86
    #16 0x1199b3e87 in -[JSVirtualMachine dealloc] JSVirtualMachine.mm:128
    #17 0x1199d33c8 in WTF::RetainPtr&lt;JSVirtualMachine&gt;::~RetainPtr() RetainPtr.h:178
    #18 0x119999998 in WTF::RetainPtr&lt;JSVirtualMachine&gt;::~RetainPtr() RetainPtr.h:176
    #19 0x119999961 in -[JSContext .cxx_destruct] JSContext.mm:52
    #20 0x7ff81b89fd0d in object_cxxDestructFromClass(objc_object*, objc_class*)+0x52 (libobjc.A.dylib:x86_64+0x10d0d)
    #21 0x7ff81b89847d in objc_destructInstance+0x5d (libobjc.A.dylib:x86_64+0x947d)
    #22 0x7ff81b89840e in _objc_rootDealloc+0x3d (libobjc.A.dylib:x86_64+0x940e)
    #23 0x119997208 in -[JSContext dealloc] JSContext.mm:100
    #24 0x108a13b81 in testToString() testapi.mm:2835
    #25 0x108a12a82 in testObjectiveCAPI testapi.mm:2858
    #26 0x1089e86ee in main testapi.c:1408
    #27 0x10da5852d in start+0x1cd (dyld:x86_64+0x552d)

previously allocated by thread T0 here:
    #0 0x108faa6f0 in __sanitizer_mz_malloc+0xa0 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x476f0)
    #1 0x7ff81b839aba in _malloc_zone_malloc+0x7c (libsystem_malloc.dylib:x86_64+0x1daba)
    #2 0x118900868 in bmalloc::DebugHeap::malloc(unsigned long, bmalloc::FailureAction) DebugHeap.cpp:72
    #3 0x1189011a8 in pas_debug_heap_malloc DebugHeap.cpp:224
    #4 0x1188cbe11 in pas_debug_heap_allocate pas_debug_heap.h:101
    #5 0x11887dc56 in bmalloc_allocate_impl_casual_case bmalloc_heap_inlines.h:69
    #6 0x11887d998 in bmalloc_allocate_casual bmalloc_heap.c:64
    #7 0x118640fe8 in WTF::FastMalloc::malloc(unsigned long) FastMalloc.h:219
    #8 0x11b24659d in JSC::WeakBlock::create(JSC::Heap&amp;, JSC::CellContainer) WeakBlock.cpp:42
    #9 0x11b2473b8 in JSC::WeakSet::addAllocator(JSC::CellContainer) WeakSet.cpp:112
    #10 0x11b247301 in JSC::WeakSet::findAllocator(JSC::CellContainer) WeakSet.cpp:90
    #11 0x11bee6a64 in JSC::WeakSet::allocate(JSC::JSValue, JSC::WeakHandleOwner*, void*) WeakSetInlines.h:39
    #12 0x119aee7e5 in JSC::Weak&lt;JSC::JSObject&gt;::Weak(JSC::JSObject*, JSC::WeakHandleOwner*, void*) WeakInlines.h:35
    #13 0x119ab8408 in JSC::Weak&lt;JSC::JSObject&gt;::Weak(JSC::JSObject*, JSC::WeakHandleOwner*, void*) WeakInlines.h:36
    #14 0x119ab446f in -[JSObjCClassInfo allocateConstructorAndPrototypeInContext:] JSWrapperMap.mm:525
    #15 0x119ab8cd1 in -[JSObjCClassInfo prototypeInContext:] JSWrapperMap.mm:567
    #16 0x119ab4274 in -[JSObjCClassInfo allocateConstructorAndPrototypeInContext:] JSWrapperMap.mm:520
    #17 0x119ab8cd1 in -[JSObjCClassInfo prototypeInContext:] JSWrapperMap.mm:567
    #18 0x119ab8e41 in -[JSObjCClassInfo structureInContext:] JSWrapperMap.mm:579
    #19 0x119ab8775 in -[JSObjCClassInfo wrapperForObject:inContext:] JSWrapperMap.mm:543
    #20 0x119aba10d in -[JSWrapperMap jsWrapperForObject:inContext:] JSWrapperMap.mm:646
    #21 0x11999a996 in -[JSContext(Internal) wrapperForObjCObject:] JSContext.mm:398
    #22 0x1199b150e in objectToValueWithoutCopy(JSContext*, objc_object*) JSValue.mm:1050
    #23 0x1199a2d96 in objectToValue(JSContext*, objc_object*) JSValue.mm:1057
    #24 0x1199a2b88 in +[JSValue valueWithObject:inContext:] JSValue.mm:96
    #25 0x108a137e1 in testToString() testapi.mm:2817
    #26 0x108a12a82 in testObjectiveCAPI testapi.mm:2858
    #27 0x1089e86ee in main testapi.c:1408
    #28 0x10da5852d in start+0x1cd (dyld:x86_64+0x552d)

SUMMARY: AddressSanitizer: heap-use-after-free WeakImpl.h:91 in JSC::WeakImpl::setState(JSC::WeakImpl::State)


This has to do with the order in which ObjC objects are being deallocated, because making this change to make the `JSContext` object be deallocated last in this function (after any autoreleased objects) will fix the above crash--though there is a second crash that occurs after this one in another test function:

```
 static void testToString()
 {
+    JSContext *context = [[JSContext alloc] init];
     @autoreleasepool {
-        JSContext *context = [[JSContext alloc] init];
         [...]
     }
 }
```

I need help figuring out how to make it okay to deallocate the `JSContext` object before `JSObjCClassInfo` objects.  Or does the test need to change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932826</commentid>
    <comment_count>9</comment_count>
      <attachid>464950</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2023-02-10 16:45:10 -0800</bug_when>
    <thetext>Comment on attachment 464950
Patch

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

&gt; Source/JavaScriptCore/API/JSValue.mm:78
&gt;          _context = nil;

Not sure we need to keep this.

&gt; Source/JavaScriptCore/API/JSValue.mm:1112
&gt; +    if (!self || !value || !context)
&gt;          return nil;

I don’t think we should call [super init] if value is nullptr or context is nil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932841</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2023-02-10 17:16:19 -0800</bug_when>
    <thetext>This crash shows that we are doing more autorelease than non-ARC.

That is not good! Has a performance cost as well as making this possible latent ordering problem happen in real life. In particular, it seems that calling classInfoForClass now ends up autoreleasing the JSObjCClassInfo object. It&apos;s always returning something that is in the class map NSDictionary, but ARC also wants to retain the local variable because who knows if it will be removed from the dictionary. I wonder if we can rearrange things so that we can call a method on those objects without it ending up in the autorelease pool. It seems strange we end up autoreleasing in this case. I thought ARC was smarter than that and often avoided autorelease on return values for common idioms. Maybe we can find a way to avoid whatever is causing the autorelease to happen.

JSValue is designed to always keep the JSContext alive. But we didn’t think of JSObjCClassInfo as something that had its own lifetime that could outlast the JSWrapperMap we are creating it for.

I think a good fix is either to use unsafe-unretained for JSObjCClassInfo or convert it from an Objective-C class to a C++ class and store it in a HashMap instead of an NSDictionary.

I’d lean toward the &quot;convert to a C++ class&quot;. You can’t accidentally autorelease something that isn’t even an Objective-C object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932922</commentid>
    <comment_count>11</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-11 09:49:43 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; This crash shows that we are doing more autorelease than non-ARC.

I don&apos;t think the stack necessarily shows/proves that we&apos;re doing more autorelease.

Only a NSMutableDictionary object is being autoreleased in the crashing stack:

    #10 0x119ab3b2e in -[JSObjCClassInfo dealloc] JSWrapperMap.mm:424
    #11 0x7ff81ba768f6 in cow_cleanup+0xa0 (CoreFoundation:x86_64+0x2d8f6)
    #12 0x7ff81ba76810 in -[__NSDictionaryM dealloc]+0x7f (CoreFoundation:x86_64+0x2d810)
    #13 0x7ff81b89c3a9 in AutoreleasePoolPage::releaseUntil(objc_object**)+0xa3 (libobjc.A.dylib:x86_64+0xd3a9)
    #14 0x7ff81b89924e in objc_autoreleasePoolPop+0xa7 (libobjc.A.dylib:x86_64+0xa24e)
    #15 0x108a13b8a in testToString() testapi.mm:2835

I think the next step may be to figure out how this NSMutableDictionary gets autoreleased.

To do this with ARC, we may need to disassemble methods where this NSMutableDictionary is returned and disassemble callers that consume the NSMutableDictionary.

For example, this code in `-classInfoForClass:` makes me wonder what the generated code is doing under ARC vs. MRR (returning an autoreleased ObjC object as a side-effect of an assignment operation--I don&apos;t think I&apos;ve ever seen Objective-C code do this before):

```
         if (!conformsToExportProtocol)
             return m_classMap.get()[(id)cls] = [self classInfoForClass:class_getSuperclass(cls)];
     }
 
-    return m_classMap.get()[(id)cls] = adoptNS([[JSObjCClassInfo alloc] initForClass:cls]).get();
+    return m_classMap.get()[(id)cls] = [[JSObjCClassInfo alloc] initForClass:cls];
 }
```

&gt; JSValue is designed to always keep the JSContext alive. But we didn’t think
&gt; of JSObjCClassInfo as something that had its own lifetime that could outlast
&gt; the JSWrapperMap we are creating it for.
&gt; 
&gt; I think a good fix is either to use unsafe-unretained for JSObjCClassInfo

I think `__weak` would be a better choice than `__unsafe_unretained`.

&gt; or
&gt; convert it from an Objective-C class to a C++ class and store it in a
&gt; HashMap instead of an NSDictionary.
&gt; 
&gt; I’d lean toward the &quot;convert to a C++ class&quot;. You can’t accidentally
&gt; autorelease something that isn’t even an Objective-C object.

It would be nice to understand what&apos;s happening as we may run into the same issue when switching other projects to ARC.  Rewriting classes isn&apos;t always going to be a viable option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932925</commentid>
    <comment_count>12</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-11 10:36:18 -0800</bug_when>
    <thetext>BTW, in the worst case, ASan might disrupt the objc_retainAutoreleasedReturnValue() optimization (that changes autoreleased objects into +1 retained references), so we need to consider that might be happening as well.  Compiling without ASan would tell us if that&apos;s an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932951</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-11 14:26:42 -0800</bug_when>
    <thetext>This patch fixes the autorelease of the `NSMutableDictionary` holding `JSObjCClassInfo` objects (the first crash I note in Comment #8), and the next crash is an autoreleased `JSObjCClassInfo` (perhaps as you suggested above):

```
diff --git a/Source/JavaScriptCore/API/JSWrapperMap.mm b/Source/JavaScriptCore/API/JSWrapperMap.mm
index 33980dc736e0..9d04279e7147 100644
--- a/Source/JavaScriptCore/API/JSWrapperMap.mm
+++ b/Source/JavaScriptCore/API/JSWrapperMap.mm
@@ -585,7 +585,7 @@ - (JSC::Structure*)structureInContext:(JSContext *)context
 @end
 
 @implementation JSWrapperMap {
-    RetainPtr&lt;NSMutableDictionary&gt; m_classMap;
+    NSMutableDictionary&lt;Class, JSObjCClassInfo *&gt; *m_classMap;
     std::unique_ptr&lt;JSC::WeakGCMap&lt;__unsafe_unretained id, JSC::JSObject&gt;&gt; m_cachedJSWrappers;
     RetainPtr&lt;NSMapTable&gt; m_cachedObjCWrappers;
 }
@@ -604,7 +604,7 @@ - (instancetype)initWithGlobalContextRef:(JSGlobalContextRef)context
 
     ASSERT(!toJSGlobalObject(context)-&gt;wrapperMap());
     toJSGlobalObject(context)-&gt;setWrapperMap(self);
-    m_classMap = adoptNS([[NSMutableDictionary alloc] init]);
+    m_classMap = [[NSMutableDictionary alloc] init];
     return self;
 }
 
@@ -614,7 +614,7 @@ - (JSObjCClassInfo*)classInfoForClass:(Class)cls
         return nil;
 
     // Check if we&apos;ve already created a JSObjCClassInfo for this Class.
-    if (JSObjCClassInfo* classInfo = (JSObjCClassInfo*)m_classMap.get()[(id)cls])
+    if (JSObjCClassInfo* classInfo = m_classMap[cls])
         return classInfo;
 
     // Skip internal classes beginning with &apos;_&apos; - just copy link to the parent class&apos;s info.
@@ -626,10 +626,10 @@ - (JSObjCClassInfo*)classInfoForClass:(Class)cls
         });
 
         if (!conformsToExportProtocol)
-            return m_classMap.get()[(id)cls] = [self classInfoForClass:class_getSuperclass(cls)];
+            return m_classMap[cls] = [self classInfoForClass:class_getSuperclass(cls)];
     }
 
-    return m_classMap.get()[(id)cls] = [[JSObjCClassInfo alloc] initForClass:cls];
+    return m_classMap[cls] = [[JSObjCClassInfo alloc] initForClass:cls];
 }
 
 - (JSValue *)jsWrapperForObject:(id)object inContext:(JSContext *)context
```

This makes me wonder how code is generated for RetainPtr::get() under ARC, and whether we need to make a fix there.

Specifically, ARC might work best if RetainPtr::get() explicitly returned a retained+autoreleased object (for example, by the compiler generating an objc_autoreleaseReturnValue() call), so that the caller can use objc_retainAutoreleasedReturnValue() to convert the autoreleased object into a +1 retained object.

Just a theory at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932975</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-11 17:36:47 -0800</bug_when>
    <thetext>This &quot;fixes&quot; the autoreleased `JSObjCClassInfo` object in `-jsWrapperForObject:inContext:`:

```
     if (class_isMetaClass(object_getClass(object)))
         jsWrapper = [[self classInfoForClass:(Class)object] constructorInContext:context];
     else {
+@autoreleasepool {
         JSObjCClassInfo* classInfo = [self classInfoForClass:[object class]];
         jsWrapper = [classInfo wrapperForObject:object inContext:context];
+}
     }
```

The next crash is caused by an autoreleased `JSVirtualMachine` object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932977</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-11 18:41:37 -0800</bug_when>
    <thetext>&gt; The next crash is caused by an autoreleased `JSVirtualMachine` object.

This fixes the autoreleased `JSVirtualMachine`:

```
 + (JSVirtualMachine *)virtualMachineWithContextGroupRef:(JSContextGroupRef)group
 {
-    JSVirtualMachine *virtualMachine = [JSVMWrapperCache wrapperForJSContextGroupRef:group];
+    JSVirtualMachine *virtualMachine;
+@autoreleasepool {
+    virtualMachine = [JSVMWrapperCache wrapperForJSContextGroupRef:group];
+}
     if (!virtualMachine)
         virtualMachine = [[JSVirtualMachine alloc] initWithContextGroupRef:group];
     return virtualMachine;
 }
```

And, of course, the next crash is an autoreleased `JSContext` object.

(The `JSVirtualMachine` and `JSContext` crashes are in `testLoaderResolvesAbsoluteScriptURL()` now, not `testToString()`.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1933014</commentid>
    <comment_count>16</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-12 08:13:03 -0800</bug_when>
    <thetext>&gt; And, of course, the next crash is an autoreleased `JSContext` object.

The autoreleased `JSContext` object is mitigated by:

```
 + (JSContext *)contextWithJSGlobalContextRef:(JSGlobalContextRef)globalContext
 {
     JSVirtualMachine *virtualMachine = [JSVirtualMachine virtualMachineWithContextGroupRef:toRef(&amp;toJS(globalContext)-&gt;vm())];
-    JSContext *context = [virtualMachine contextForGlobalContextRef:globalContext];
+    JSContext *context;
+@autoreleasepool {
+    context = [virtualMachine contextForGlobalContextRef:globalContext];
+}
     if (!context)
         context = [[JSContext alloc] initWithGlobalContextRef:globalContext];
     return context;
 }
```

Next crash is due to an autoreleased `JSValue` object, still running `testLoaderResolvesAbsoluteScriptURL()`.

Are we getting close to the end?  I&apos;m trying to get the tests working, then go back to figure out why objects are being autoreleased in each of these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1933180</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-02-13 07:34:58 -0800</bug_when>
    <thetext>There are too many places where a `JSValue` can be created, so I&apos;m going to change strategies to pause execution in `testapi.mm` at the end of an autoreleasePool (ARP), then use MallocStackLogging and `leaks` (a) to list the objects in the ARP, and (b) to get stack traces for the allocation of those objects so I know where they&apos;re coming from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1933213</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2023-02-13 09:47:05 -0800</bug_when>
    <thetext>I’m glad you are continuing to analyze and look deeply at what is happening here.

But I suggest you think about what our eventual goal is for for the autoreleased objects?

If we don’t want autoreleased objects to leak out, then we can put autorelease pools at all the API boundaries.

If we don’t want to pay the increased performance cost of putting more objects into the autorelease pool, then we probably can’t accomplish that by adding @autoreleasepool. One approach is to change idioms to not use Objective-C for things that we don’t need to and cut down on the use of RetainPtr for Objective-C objects. RetainPtr offers interoperability between ARC and non-ARC code, but I believe that comes at the cost of autorelease. It’s good for safely putting an Objective-C object into a header that can be included by ARC and non-ARC code (possibly including non-Objective-C C++ code), but isn’t really needed in code that’s only used with ARC. Certainly not in private implementation details of Objective-C classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1933214</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2023-02-13 09:51:29 -0800</bug_when>
    <thetext>Note that even before ARC we would definitely autorelease JSValue objects, including as part of the public API contract. That’s one reason JSValue objects are careful to take care of their lifetimes properly.

So we don’t need to get rid of JSValue autoreleases just to keep the API contract clean the way we do with internal objects like the JSObjCClassInfo objects.

But we still might want to make sure there are not a lot more than before because of the additional performance cost. I suppose ideally if the caller is using Swift or ARC Objective-C maybe we could get to &quot;no autorelease at all&quot;, although I am not sure that is possible.

If we take all of this on, it might be too big a project.

I think the &quot;autorelease that breaks semantics&quot; problem with JSObjCClassInfo is a different type of problem than the JSValue part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1940304</commentid>
    <comment_count>20</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2023-03-09 21:06:56 -0800</bug_when>
    <thetext>Another PR was posted here:  https://github.com/WebKit/WebKit/pull/11299</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2097282</commentid>
    <comment_count>21</comment_count>
      <attachid>474320</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2025-02-23 19:31:33 -0800</bug_when>
    <thetext>Created attachment 474320
Patch v3

Just to run tests; not to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2097286</commentid>
    <comment_count>22</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2025-02-23 19:37:41 -0800</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #21)
&gt; Created attachment 474320 [details]
&gt; Patch v3

This rebases the PR onto 290921@main along with the required fixes to compile.

Not ready to land yet as JSC API tests still crash (more reproducible with ASan builds):

$ ./Tools/Scripts/run-javascriptcore-tests --release --no-build --testapi</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418743</attachid>
            <date>2021-01-29 10:02:15 -0800</date>
            <delta_ts>2023-02-10 16:16:56 -0800</delta_ts>
            <desc>First cut; compiles locally, not tested</desc>
            <filename>bug-221107-20210129100214.patch</filename>
            <type>text/plain</type>
            <size>23096</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YjhmYzVmZGIxMmZlMjUyMGJkNzg0NTA1MGMwNTg0MTYwMTIxZjFiLi45MTg3NjZkMTQxYWFjOWM3
NDZmOGRhNmRlMTdhYTY1NDhhMjZhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4IEBACisyMDIxLTAxLTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBKYXZhU2NyaXB0Q29yZSBzaG91bGQgYnVpbGQgd2l0aCBBUkMgZW5hYmxlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTA3CisKIDIw
MjEtMDEtMjggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
SlNDXSBBZGQgSlNQcm9taXNlOjpyZWplY3RlZFByb21pc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0KaW5kZXggZmRlODFlYzllZmU1ZGQyY2M0
MWUwYmE4ZjBiMGUyYjA5NmExMzJhZS4uNWQ4MzRkNWY4MGJiYzQ2ODQ2MjdiOTg2M2MwYmE1ZGIw
YTI1OTk1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBw
ZXJPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0KQEAgLTQ4LDIyICs0OCwyMiBAQCBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCkKIAogdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqKQogewotICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVy
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0
KCkuYXNDZWxsKCkpOworICAgIGF1dG8gd3JhcHBlck9iamVjdCA9IHN0YXRpY19jYXN0PEpTQzo6
SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBpZiAoIXdy
YXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlND
OjpIZWFwOjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxlYXNlU29vbihhZG9wdE5TKHN0YXRpY19j
YXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpKSk7CisgICAgSlNDOjpIZWFw
OjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxlYXNlU29vbihhZG9wdENGKHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSkpOwogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6Oldl
YWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAogYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiopCiB7Ci0gICAgSlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJP
YmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQo
KS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nl
c3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZwog
ICAgIC8vIHRoZSBzYW1lIE9iamVjdGl2ZS1DIG9iamVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2Jq
ZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBvYmplY3RzIGFsaXZlLgotICAgIGlmICghd3Jh
cHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVy
ZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBl
ck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICBhdXRvIHdyYXBwZXJPYmplY3QgPSBKU0M6
OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7
CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKQorICAgICAgICAmJiB2
aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xv
YmFsT2JqZWN0KCkpCisgICAgICAgICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBw
ZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTIw
LDE2ICsxMjAsMTUgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpzZXRXcmFwcGVkT2JqZWN0KHZvaWQqIHdy
YXBwZWRPYmplY3QpCiB7CiAgICAgQVNTRVJUKCFtX3dyYXBwZWRPYmplY3QpOwotICAgIG1fd3Jh
cHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3JhcHBlZE9iamVjdCkgcmV0YWluXTsKKyAg
ICBtX3dyYXBwZWRPYmplY3QgPSBjb25zdF9jYXN0PHZvaWQqPihDRlJldGFpbih3cmFwcGVkT2Jq
ZWN0KSk7CiB9CiAKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU0FQSVdyYXBwZXJP
YmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxs
KTsKKyAgICBhdXRvIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3Qq
PihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCi0gICAg
dm9pZCogd3JhcHBlZE9iamVjdCA9IHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKTsKLSAgICBp
ZiAod3JhcHBlZE9iamVjdCkKKyAgICBpZiAoYXV0byB3cmFwcGVkT2JqZWN0ID0gdGhpc09iamVj
dC0+d3JhcHBlZE9iamVjdCgpKQogICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaCh2aXNp
dG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IGZkMjVjMDhkM2NlMDVmYWExNTNlNzNmMGYwNTY4YTg5
ODRlYTQ2NjcuLmU3MWUzMjMzZTE3NGI4NmZjNmQ5Yjg1MTQ5OWMxMTkyYzMzNjU4YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC02MiwxMyArNjIsMTMgQEAgLSAo
dm9pZCllbnN1cmVXcmFwcGVyTWFwCiB7CiAgICAgaWYgKCF0b0pTKFtzZWxmIEpTR2xvYmFsQ29u
dGV4dFJlZl0pLT53cmFwcGVyTWFwKCkpIHsKICAgICAgICAgLy8gVGhlIG1hcCB3aWxsIGJlIHJl
dGFpbmVkIGJ5IHRoZSBHbG9iYWxPYmplY3QgaW4gaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIFtb
W0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOltzZWxmIEpTR2xv
YmFsQ29udGV4dFJlZl1dIHJlbGVhc2VdOworICAgICAgICAodm9pZClbW0pTV3JhcHBlck1hcCBh
bGxvY10gaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOltzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl1d
OwogICAgIH0KIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKIHsKLSAgICByZXR1cm4gW3NlbGYg
aW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV1dOworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOltb
SlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF1dOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lCkBA
IC03Nyw3ICs3Nyw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1hY2hpbmUKICAgICBpZiAoIXNlbGYpCiAgICAgICAg
IHJldHVybiBuaWw7CiAKLSAgICBtX3ZpcnR1YWxNYWNoaW5lID0gW3ZpcnR1YWxNYWNoaW5lIHJl
dGFpbl07CisgICAgbV92aXJ0dWFsTWFjaGluZSA9IHZpcnR1YWxNYWNoaW5lOwogICAgIG1fY29u
dGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVhbE1h
Y2hpbmUodmlydHVhbE1hY2hpbmUpLCAwKTsKIAogICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlciA9
IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb25WYWx1ZSkgewpAQCAtOTQs
OSArOTQsNiBAQCAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBtX2V4Y2VwdGlvbi5jbGVhcigpOwog
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKLSAgICBbbV92aXJ0dWFsTWFj
aGluZSByZWxlYXNlXTsKLSAgICBbX2V4Y2VwdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwogfQogCiAtIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5n
ICopc2NyaXB0CkBAIC0zMzYsNyArMzMzLDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoR2xv
YmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWNvbnRleHQKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY29u
dGV4dCk7Ci0gICAgbV92aXJ0dWFsTWFjaGluZSA9IFtbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFs
TWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJmdsb2JhbE9iamVjdC0+dm0oKSldIHJl
dGFpbl07CisgICAgbV92aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxN
YWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsT2JqZWN0LT52bSgpKV07CiAg
ICAgQVNTRVJUKG1fdmlydHVhbE1hY2hpbmUpOwogICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29u
dGV4dFJldGFpbihjb250ZXh0KTsKICAgICBbc2VsZiBlbnN1cmVXcmFwcGVyTWFwXTsKQEAgLTM3
MCw5ICszNjcsNyBAQCAtIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVm
KWV4Y2VwdGlvblZhbHVlCiAtICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tE
YXRhICopY2FsbGJhY2tEYXRhIGNhbGxlZVZhbHVlOihKU1ZhbHVlUmVmKWNhbGxlZVZhbHVlIHRo
aXNWYWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3Vt
ZW50Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzCiB7CiAgICAg
VGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBbc2VsZiByZXRhaW5dOwot
ICAgIENhbGxiYWNrRGF0YSAqcHJldlN0YWNrID0gKENhbGxiYWNrRGF0YSAqKXRocmVhZC5tX2Fw
aURhdGE7Ci0gICAgKmNhbGxiYWNrRGF0YSA9IChDYWxsYmFja0RhdGEpeyBwcmV2U3RhY2ssIHNl
bGYsIFtzZWxmLmV4Y2VwdGlvbiByZXRhaW5dLCBjYWxsZWVWYWx1ZSwgdGhpc1ZhbHVlLCBhcmd1
bWVudENvdW50LCBhcmd1bWVudHMsIG5pbCB9OworICAgICpjYWxsYmFja0RhdGEgPSB7IHN0YXRp
Y19jYXN0PENhbGxiYWNrRGF0YSo+KHRocmVhZC5tX2FwaURhdGEpLCBzZWxmLCBzZWxmLmV4Y2Vw
dGlvbiwgY2FsbGVlVmFsdWUsIHRoaXNWYWx1ZSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBu
aWwgfTsKICAgICB0aHJlYWQubV9hcGlEYXRhID0gY2FsbGJhY2tEYXRhOwogICAgIHNlbGYuZXhj
ZXB0aW9uID0gbmlsOwogfQpAQCAtMzgxLDEwICszNzYsNyBAQCAtICh2b2lkKWVuZENhbGxiYWNr
V2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YQogewogICAgIFRocmVhZCYgdGhy
ZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgc2VsZi5leGNlcHRpb24gPSBjYWxsYmFja0Rh
dGEtPnByZXNlcnZlZEV4Y2VwdGlvbjsKLSAgICBbY2FsbGJhY2tEYXRhLT5wcmVzZXJ2ZWRFeGNl
cHRpb24gcmVsZWFzZV07Ci0gICAgW2NhbGxiYWNrRGF0YS0+Y3VycmVudEFyZ3VtZW50cyByZWxl
YXNlXTsKICAgICB0aHJlYWQubV9hcGlEYXRhID0gY2FsbGJhY2tEYXRhLT5uZXh0OwotICAgIFtz
ZWxmIHJlbGVhc2VdOwogfQogCiAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6KGlk
KW9iamVjdApAQCAtNDA5LDcgKzQwMSw3IEBAICsgKEpTQ29udGV4dCAqKWNvbnRleHRXaXRoSlNH
bG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAogICAgIEpT
VmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVh
bE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ0b0pTKGdsb2JhbENvbnRleHQpLT52
bSgpKV07CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3ZpcnR1YWxNYWNoaW5lIGNvbnRleHRG
b3JHbG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdOwogICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhHbG9iYWxDb250ZXh0
UmVmOmdsb2JhbENvbnRleHRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dCA9IFtbSlND
b250ZXh0IGFsbG9jXSBpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dF07CiAg
ICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCmluZGV4IGMxODczN2JmODc2YjZkZDUyMGEzMzcyOTRiOWMyMjM5Mjc1OTk5
YzQuLmFmOTg2ZGJmMDhiNGE4ZjMxMzljMDlhY2M2MTU0ZTYxYWZhM2Q2MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQpAQCAtNjAsMTQgKzYwLDE0IEBA
IEBpbXBsZW1lbnRhdGlvbiBKU01hbmFnZWRWYWx1ZSB7CiAKICsgKEpTTWFuYWdlZFZhbHVlICop
bWFuYWdlZFZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlICopdmFsdWUKIHsKLSAgICByZXR1cm4gW1tb
c2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVy
biBbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWVdOwogfQogCiArIChKU01hbmFnZWRW
YWx1ZSAqKW1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZSAqKXZhbHVlIGFuZE93bmVyOihp
ZClvd25lcgogewogICAgIEpTTWFuYWdlZFZhbHVlICptYW5hZ2VkVmFsdWUgPSBbW3NlbGYgYWxs
b2NdIGluaXRXaXRoVmFsdWU6dmFsdWVdOwogICAgIFt2YWx1ZS5jb250ZXh0LnZpcnR1YWxNYWNo
aW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6bWFuYWdlZFZhbHVlIHdpdGhPd25lcjpvd25lcl07Ci0g
ICAgcmV0dXJuIFttYW5hZ2VkVmFsdWUgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBtYW5hZ2Vk
VmFsdWU7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMTUsMTIgKzExNSw5IEBAIC0g
KHZvaWQpZGVhbGxvYwogICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCiAgICAgICAgICAgICAg
ICAgW3ZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6c2VsZiB3aXRoT3duZXI6
b3duZXJdOwogICAgICAgICB9Ci0gICAgICAgIFtjb3B5IHJlbGVhc2VdOwogICAgIH0KIAogICAg
IFtzZWxmIGRpc2Nvbm5lY3RWYWx1ZV07Ci0gICAgW21fb3duZXJzIHJlbGVhc2VdOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKIH0KIAogLSAodm9pZClkaWRBZGRPd25lcjooaWQpb3duZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmluZGV4IDllNDE0NTcxMjRiZjE0M2VhNDE3NjE1
YzQ5ODJhNTE5YzFkOTNhN2UuLmUwMGU3MTUwNGYzMDc2ZGIxZDA5NmVhYzI2NzA1MDkzYTBiZTlm
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpAQCAtMTEwLDcgKzExMCw3
IEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhT
b3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuCiAgICAgaWYgKCF2YWxpZGF0ZUJ5dGVjb2RlQ2Fj
aGVQYXRoKGNhY2hlUGF0aCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNT
Y3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOwogICAgIHJlc3Vs
dC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKICAg
ICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOwpAQCAtMTM4LDcgKzEzOCw3IEBAICsgKGluc3Rh
bmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6KE5TVVJMCiAgICAgaWYgKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkp
CiAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
Ik5vdCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2Fz
dDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKIAotICAgIEpTU2NyaXB0ICpyZXN1
bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIEpTU2NyaXB0
ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKICAgICByZXN1bHQtPm1fdmlydHVh
bE1hY2hpbmUgPSB2bTsKICAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CiAgICAgcmVzdWx0LT5t
X3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhiaXR3aXNl
X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQppbmRleCAxODQ0YjA2MTMyNTUxY2U5YmJh
Y2U0MjQyNDFmMTZiOWJkZGQ5NGUyLi44NDkxOTU0NDc0NDRhYmY3OTYwYzY4NDE5M2NlYWI4M2Jk
YjNiOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCkBAIC03Miw5ICs3Miw2
IEBAIEBpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlIHsKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpT
VmFsdWVVbnByb3RlY3QoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOwot
ICAgIFtfY29udGV4dCByZWxlYXNlXTsKLSAgICBfY29udGV4dCA9IG5pbDsKLSAgICBbc3VwZXIg
ZGVhbGxvY107CiB9CiAKIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KQEAgLTExMTUsNyArMTEx
Miw3IEBAIC0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dAogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgIF9jb250ZXh0ID0gW2NvbnRleHQgcmV0YWluXTsKKyAgICBfY29udGV4dCA9
IGNvbnRleHQ7CiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgIEpTVmFsdWVQcm90ZWN0KFtfY29u
dGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlKTsKICAgICByZXR1cm4gc2VsZjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQppbmRleCA3OWIw
ODFkNDVjYmU0MGUwYzAxNmY0YzUyYmNmNzQ3NzhhYzIxNDdjLi41YjM2OGRhZThjNmFkOGY0ODYw
OWU1MjRiMzhkYmU1YzcxMmY5Nzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZpcnR1YWxNYWNoaW5lLm1tCkBAIC0xMjYsMTAgKzEyNiw2IEBAIC0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRleHRHcm91cFJlZjooSlNDb250ZXh0R3JvdXBSZWYpZ3JvdXAKIC0gKHZvaWQp
ZGVhbGxvYwogewogICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZShtX2dyb3VwKTsKLSAgICBbbV9j
b250ZXh0Q2FjaGUgcmVsZWFzZV07Ci0gICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZWxlYXNl
XTsKLSAgICBbbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRl
YWxsb2NdOwogfQogCiBzdGF0aWMgaWQgZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjdCkK
QEAgLTI0MCw3ICsyMzYsNyBAQCArIChKU1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1hY2hpbmVX
aXRoQ29udGV4dEdyb3VwUmVmOihKU0NvbnRleHRHcm91cFJlZilncm91cAogewogICAgIEpTVmly
dHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZv
ckpTQ29udGV4dEdyb3VwUmVmOmdyb3VwXTsKICAgICBpZiAoIXZpcnR1YWxNYWNoaW5lKQotICAg
ICAgICB2aXJ0dWFsTWFjaGluZSA9IFtbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRXaXRo
Q29udGV4dEdyb3VwUmVmOmdyb3VwXSBhdXRvcmVsZWFzZV07CisgICAgICAgIHZpcnR1YWxNYWNo
aW5lID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0V2l0aENvbnRleHRHcm91cFJlZjpn
cm91cF07CiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCmluZGV4IGU4ZDIzMGY0ZDc5N2I4N2E4NmY3YTk4MDkw
ZWMyNDliNmU1NTFkYjguLjQxNTMyMTkwMDI5OWU5YzYxMDQ2MTRmYmQ4OWZhNGU2NjcwMzM2ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCkBAIC0yODcsOCAr
Mjg3LDYgQEAgc3RhdGljIHZvaWQgY29weU1ldGhvZHNUb09iamVjdChKU0NvbnRleHQgKmNvbnRl
eHQsIENsYXNzIG9iamNDbGFzcywgUHJvdG9jb2wgKnAKICAgICAgICAgICAgICAgICBwdXROb25F
bnVtZXJhYmxlKGNvbnRleHQsIG9iamVjdCwgbmFtZSwgW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1
ZVJlZjptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdKTsKICAgICAgICAgfQogICAgIH0pOwotCi0g
ICAgW3JlbmFtZU1hcCByZWxlYXNlXTsKIH0KIAogc3RydWN0IFByb3BlcnR5IHsKQEAgLTQyOCw3
ICs0MjYsNiBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdEZvckNsYXNzOihDbGFzcyljbHMKIC0gKHZv
aWQpZGVhbGxvYwogewogICAgIEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYuZ2V0KCkpOwotICAg
IFtzdXBlciBkZWFsbG9jXTsKIH0KIAogc3RhdGljIEpTQzo6SlNPYmplY3QqIGFsbG9jYXRlQ29u
c3RydWN0b3JGb3JDdXN0b21DbGFzcyhKU0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIqIGNs
YXNzTmFtZSwgQ2xhc3MgY2xzKQpAQCAtNTIwLDggKzUxNyw4IEBAIC0gKENvbnN0cnVjdG9yUHJv
dG90eXBlUGFpcilhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlSW5Db250ZXh0OihKU0Nv
bnRleHQKIAogICAgICAgICBQcm90b2NvbCAqZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFBy
b3RvY29sKCk7CiAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKG1f
Y2xhc3MsIGV4cG9ydFByb3RvY29sLCBeKFByb3RvY29sICpwcm90b2NvbCwgYm9vbCYpewotICAg
ICAgICAgICAgY29weVByb3RvdHlwZVByb3BlcnRpZXMoY29udGV4dCwgbV9jbGFzcywgcHJvdG9j
b2wsIHByb3RvdHlwZSk7Ci0gICAgICAgICAgICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQs
IG1fY2xhc3MsIHByb3RvY29sLCBOTywgY29uc3RydWN0b3IpOworICAgICAgICAgICAgY29weVBy
b3RvdHlwZVByb3BlcnRpZXMoY29udGV4dCwgc2VsZi0+bV9jbGFzcywgcHJvdG9jb2wsIHByb3Rv
dHlwZSk7CisgICAgICAgICAgICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIHNlbGYtPm1f
Y2xhc3MsIHByb3RvY29sLCBOTywgY29uc3RydWN0b3IpOwogICAgICAgICB9KTsKIAogICAgICAg
ICAvLyBTZXQgW1Byb3RvdHlwZV0uCkBAIC02MTYsMTMgKzYxMyw2IEBAIC0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZiljb250ZXh0CiAg
ICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFttX2NhY2hlZE9i
akNXcmFwcGVycyByZWxlYXNlXTsKLSAgICBbbV9jbGFzc01hcCByZWxlYXNlXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KIC0gKEpTT2JqQ0NsYXNzSW5mbyopY2xhc3NJbmZvRm9yQ2xhc3M6
KENsYXNzKWNscwogewogICAgIGlmICghY2xzKQpAQCAtNjQ0LDcgKzYzNCw3IEBAIC0gKEpTT2Jq
Q0NsYXNzSW5mbyopY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKWNscwogICAgICAgICAgICAgcmV0
dXJuIG1fY2xhc3NNYXBbKGlkKWNsc10gPSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19n
ZXRTdXBlcmNsYXNzKGNscyldOwogICAgIH0KIAotICAgIHJldHVybiBtX2NsYXNzTWFwWyhpZClj
bHNdID0gW1tbSlNPYmpDQ2xhc3NJbmZvIGFsbG9jXSBpbml0Rm9yQ2xhc3M6Y2xzXSBhdXRvcmVs
ZWFzZV07CisgICAgcmV0dXJuIG1fY2xhc3NNYXBbKGlkKWNsc10gPSBbW0pTT2JqQ0NsYXNzSW5m
byBhbGxvY10gaW5pdEZvckNsYXNzOmNsc107CiB9CiAKIC0gKEpTVmFsdWUgKilqc1dyYXBwZXJG
b3JPYmplY3Q6KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKQEAgLTY3
NSw3ICs2NjUsNyBAQCAtIChKU1ZhbHVlICopb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOihKU1Zh
bHVlUmVmKXZhbHVlIGluQ29udGV4dDpjb250ZXh0CiAgICAgQVNTRVJUKHRvSlNHbG9iYWxPYmpl
Y3QoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSktPndyYXBwZXJNYXAoKSA9PSBzZWxmKTsK
ICAgICBKU1ZhbHVlICp3cmFwcGVyID0gKF9fYnJpZGdlIEpTVmFsdWUgKilOU01hcEdldChtX2Nh
Y2hlZE9iakNXcmFwcGVycywgdmFsdWUpOwogICAgIGlmICghd3JhcHBlcikgewotICAgICAgICB3
cmFwcGVyID0gW1tbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6
Y29udGV4dF0gYXV0b3JlbGVhc2VdOworICAgICAgICB3cmFwcGVyID0gW1tKU1ZhbHVlIGFsbG9j
XSBpbml0V2l0aFZhbHVlOnZhbHVlIGluQ29udGV4dDpjb250ZXh0XTsKICAgICAgICAgTlNNYXBJ
bnNlcnQobV9jYWNoZWRPYmpDV3JhcHBlcnMsIHZhbHVlLCAoX19icmlkZ2Ugdm9pZCopd3JhcHBl
cik7CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KaW5kZXggNGJjZDhmNDVkOWM0NzI3YWI0
NjIyMjJiNWQ1NTZmN2VjNTUxN2JjMC4uYzQ4NDVjOTA3OGY2NDJhNmE4MDllOGFiZTFhNDk3YmJl
NTUxZGZiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFj
a0Z1bmN0aW9uLm1tCkBAIC01ODUsMTIgKzU4NSwxMSBAQCBKU1ZhbHVlUmVmIE9iakNDYWxsYmFj
a0Z1bmN0aW9uSW1wbDo6Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNP
YgogICAgIEFTU0VSVChleGNlcHRpb24gJiYgISpleGNlcHRpb24pOwogICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKIAotICAg
IGlkIHRhcmdldDsKICAgICBzaXplX3QgZmlyc3RBcmd1bWVudDsKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgQ2FsbGJhY2tJbml0TWV0aG9kOiB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCF0aGlzT2JqZWN0KTsKLSAgICAgICAgdGFyZ2V0ID0gW21faW5zdGFuY2VDbGFzcyBhbGxv
Y107CisgICAgICAgIGlkIHRhcmdldCA9IFttX2luc3RhbmNlQ2xhc3MgYWxsb2NdOwogICAgICAg
ICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFzcy5n
ZXQoKV0pIHsKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVF
cnJvcih0b0pTKGNvbnRleHRSZWYpLCAic2VsZiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0
aXZlLUMgaW5zdGFuY2UgbWV0aG9kIl9zKSk7CiAgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikK
QEAgLTU5OCwxMSArNTk3LDEyIEBAIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
OjpjYWxsKEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dFJlZik7CiAgICAgICAgIH0KICAg
ICAgICAgW21faW52b2NhdGlvbiBzZXRUYXJnZXQ6dGFyZ2V0XTsKKyAgICAgICAgQ0ZSZXRhaW4o
KF9fYnJpZGdlIENGVHlwZVJlZil0YXJnZXQpOwogICAgICAgICBmaXJzdEFyZ3VtZW50ID0gMjsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDog
ewotICAgICAgICB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHRoaXNP
YmplY3QpOworICAgICAgICBpZCB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRS
ZWYsIHRoaXNPYmplY3QpOwogICAgICAgICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRP
ZkNsYXNzOm1faW5zdGFuY2VDbGFzcy5nZXQoKV0pIHsKICAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHRSZWYpLCAic2VsZiB0eXBl
IGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0aXZlLUMgaW5zdGFuY2UgbWV0aG9kIl9zKSk7CiAgICAg
ICAgICAgICBpZiAoKmV4Y2VwdGlvbikKQEAgLTYzNSwxMyArNjM1LDEzIEBAIEpTVmFsdWVSZWYg
T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmpl
Y3RSZWYgdGhpc09iCiAgICAgaWYgKCpleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgLy8gQmFsYW5jZSBvdXIgY2FsbCB0byAtYWxsb2Mgd2l0aCBhIGNhbGwgdG8gLWF1
dG9yZWxlYXNlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYWZ0ZXIgY2FsbGluZyAtaW5pdAorICAgIC8v
IEJhbGFuY2Ugb3VyIGNhbGwgdG8gQ0ZSZXRhaW4gd2l0aCBhIGNhbGwgdG8gQ0ZBdXRvcmVsZWFz
ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGFmdGVyIGNhbGxpbmcgaW5pdAogICAgIC8vIGJlY2F1c2Ug
aW5pdCBmYW1pbHkgbWV0aG9kcyBhcmUgYWxsb3dlZCB0byByZWxlYXNlIHRoZSBhbGxvY2F0ZWQg
b2JqZWN0IGFuZCByZXR1cm4gc29tZXRoaW5nIAogICAgIC8vIGVsc2UgaW4gaXRzIHBsYWNlLgog
ICAgIGlmIChtX3R5cGUgPT0gQ2FsbGJhY2tJbml0TWV0aG9kKSB7CiAgICAgICAgIGlkIG9iamNS
ZXN1bHQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHJlc3VsdCk7CiAgICAgICAg
IGlmIChvYmpjUmVzdWx0KQotICAgICAgICAgICAgW29iamNSZXN1bHQgYXV0b3JlbGVhc2VdOwor
ICAgICAgICAgICAgQ0ZBdXRvcmVsZWFzZSgoX19icmlkZ2UgQ0ZUeXBlUmVmKW9iamNSZXN1bHQp
OwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCmluZGV4IDA3NDI2ZTUwMTU4YjI0YzE2
ZDYxYThlZGJiYmY2ZGE0YTA2NGE0N2QuLjVkMTU0OGMzOTg3Y2ZlMjBiMzc1MTYwZTBmNjNhNjU1
OGIxZGRjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnCkBAIC0zNSw2ICszNSw3IEBAIEFMV0FZU19TRUFSQ0hfVVNFUl9QQVRI
UyA9IE5POwogCiBDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzF6OwogQ0xBTkdf
Q1hYX0xJQlJBUlkgPSBsaWJjKys7CitDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CiBDTEFO
R19FTkFCTEVfT0JKQ19XRUFLID0gWUVTOwogQ0xBTkdfV0FSTl9CTE9DS19DQVBUVVJFX0FVVE9S
RUxFQVNJTkcgPSBZRVM7CiBDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90
ZUNvbm5lY3Rpb25Ub1RhcmdldENvY29hLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0KaW5kZXgg
MTIyMTE5MDMxODk4MTc5M2Q4MTEwMGMwZGE2YWQ4YjkyYjRkMzBjMi4uZjIzYjk3NzY5ZDQ4NGFj
NWY5M2ZiOGEyOTQ3ZmM5YTI4MmQ2YzgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2Eu
bW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVt
b3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0KQEAgLTEyOCwxMiArMTI4LDEyIEBAIE9wdGlv
bmFsPFRhcmdldElEPiBSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ6OnRhcmdldElkZW50aWZpZXIo
KSBjb25zdAogCiBOU1N0cmluZyAqUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Ojpjb25uZWN0aW9u
SWRlbnRpZmllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbbV9jb25uZWN0aW9uSWRlbnRpZmll
ciBjb3B5XSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFttX2Nvbm5lY3Rpb25JZGVudGlmaWVy
IGNvcHldOwogfQogCiBOU1N0cmluZyAqUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0OjpkZXN0aW5h
dGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbbV9kZXN0aW5hdGlvbiBjb3B5XSBhdXRvcmVs
ZWFzZV07CisgICAgcmV0dXJuIFttX2Rlc3RpbmF0aW9uIGNvcHldOwogfQogCiB2b2lkIFJlbW90
ZUNvbm5lY3Rpb25Ub1RhcmdldDo6ZGlzcGF0Y2hBc3luY09uVGFyZ2V0KEZ1bmN0aW9uPHZvaWQg
KCk+JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JDb2NvYS5tbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvckNvY29hLm1tCmlu
ZGV4IDZkYmJhMzEyYjg4ZTg3M2I3MWU3NWQ2YzM1NGMyM2UyNGYyMWQ0YTcuLjdjYzQwZDhmYzBl
ZDA2ZmZlNTFjYmY2OTQyZTY1ZGFkMDI4ZDdhZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvckNvY29hLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90ZUlu
c3BlY3RvckNvY29hLm1tCkBAIC0yODEsNyArMjgxLDYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6
OnNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCkKIAogICAgIG1fcmVsYXlDb25uZWN0aW9uID0g
YWRvcHRSZWYobmV3IFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgbV94
cGNRdWV1ZSwgdGhpcykpOwogICAgIG1fcmVsYXlDb25uZWN0aW9uLT5zZW5kTWVzc2FnZShAInN5
biIsIG5pbCk7IC8vIFNlbmQgYSBzaW1wbGUgbWVzc2FnZSB0byBpbml0aWFsaXplIHRoZSBYUEMg
Y29ubmVjdGlvbi4KLSAgICB4cGNfcmVsZWFzZShjb25uZWN0aW9uKTsKIAogICAgIGlmIChtX2F1
dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVUYXJnZXRJZGVudGlmaWVyKSB7CiAgICAgICAgIC8v
IFdlIGFscmVhZHkgaGF2ZSBhIGRlYnVnZ2FibGUgd2FpdGluZyB0byBiZSBhdXRvbWF0aWNhbGx5
IGluc3BlY3RlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5l
Y3Rpb24uaAppbmRleCBjMzE2MzhmNGUyZGJlMjBiMWYwMzgzZGNmNzBmN2E4ZDVhMjYwY2ZjLi4w
ZGE4ODVkZWFiODZhYThkODliNjNmNTI4YjdlNjNjMzNlNDg0ZDM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JY
UENDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvY29jb2EvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5oPgor
I2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogCkBAIC02Myw4ICs2
NCw4IEBAIHByaXZhdGU6CiAgICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgbV9jbGllbnQgaXMgdGhy
ZWFkIHNhZmUgYW5kIGltbWVkaWF0ZWx5IGNsZWFyZWQgaW4gY2xvc2UoKS4KICAgICBMb2NrIG1f
bXV0ZXg7CiAKLSAgICB4cGNfY29ubmVjdGlvbl90IG1fY29ubmVjdGlvbjsKLSAgICBkaXNwYXRj
aF9xdWV1ZV90IG1fcXVldWU7CisgICAgT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gbV9j
b25uZWN0aW9uOworICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fcXVldWU7CiAg
ICAgQ2xpZW50KiBtX2NsaWVudDsKICAgICBib29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICNpZiBQ
TEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlSW5zcGVjdG9yWFBDQ29u
bmVjdGlvbi5tbQppbmRleCA3MjMxMDNhMDM4NzNiMzdiOWFlYjljN2NmZTRkNDA5Njc4NGYzZjM2
Li4yNmMxM2Y3MzFkM2RjYzhmZTA1YjMxMzMzMmZhMzcwYWU5OGMxN2UyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0KQEAgLTUxLDE4ICs1
MSwxNSBAQCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpSZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QgY29ubgogICAgICwgbV9xdWV1ZShxdWV1ZSkKICAg
ICAsIG1fY2xpZW50KGNsaWVudCkKIHsKLSAgICBkaXNwYXRjaF9yZXRhaW4obV9xdWV1ZSk7Ci0K
LSAgICB4cGNfcmV0YWluKG1fY29ubmVjdGlvbik7Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2V0X3Rh
cmdldF9xdWV1ZShtX2Nvbm5lY3Rpb24sIG1fcXVldWUpOwotICAgIHhwY19jb25uZWN0aW9uX3Nl
dF9ldmVudF9oYW5kbGVyKG1fY29ubmVjdGlvbiwgXih4cGNfb2JqZWN0X3Qgb2JqZWN0KSB7Cisg
ICAgeHBjX2Nvbm5lY3Rpb25fc2V0X3RhcmdldF9xdWV1ZShtX2Nvbm5lY3Rpb24uZ2V0KCksIG1f
cXVldWUuZ2V0KCkpOworICAgIHhwY19jb25uZWN0aW9uX3NldF9ldmVudF9oYW5kbGVyKG1fY29u
bmVjdGlvbi5nZXQoKSwgXih4cGNfb2JqZWN0X3Qgb2JqZWN0KSB7CiAgICAgICAgIGhhbmRsZUV2
ZW50KG9iamVjdCk7CiAgICAgfSk7CiAKICAgICAvLyBCYWxhbmNlZCBieSBkZXJlZiB3aGVuIHRo
ZSB4cGNfY29ubmVjdGlvbiByZWNlaXZlcyBYUENfRVJST1JfQ09OTkVDVElPTl9JTlZBTElELgog
ICAgIHJlZigpOwogCi0gICAgeHBjX2Nvbm5lY3Rpb25fcmVzdW1lKG1fY29ubmVjdGlvbik7Cisg
ICAgeHBjX2Nvbm5lY3Rpb25fcmVzdW1lKG1fY29ubmVjdGlvbi5nZXQoKSk7CiB9CiAKIFJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246On5SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uKCkK
QEAgLTgzLDcgKzgwLDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpjbG9z
ZUZyb21NZXNzYWdlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiAgICAgbV9jbGllbnQgPSBudWxs
cHRyOwogCi0gICAgZGlzcGF0Y2hfYXN5bmMobV9xdWV1ZSwgXnsKKyAgICBkaXNwYXRjaF9hc3lu
YyhtX3F1ZXVlLmdldCgpLCBeewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7CiAg
ICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIG9uZSBsYXN0IFhQQ19FUlJPUl9DT05ORUNUSU9O
X0lOVkFMSUQgZXZlbnQgb24gdGhlIHF1ZXVlIGFuZCBkZXJlZiB1cy4KICAgICAgICAgY2xvc2VP
blF1ZXVlKCk7CkBAIC05MywxNSArOTAsMTEgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JYUENDb25u
ZWN0aW9uOjpjbG9zZUZyb21NZXNzYWdlKCkKIHZvaWQgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbjo6Y2xvc2VPblF1ZXVlKCkKIHsKICAgICBpZiAobV9jb25uZWN0aW9uKSB7Ci0gICAgICAg
IHhwY19jb25uZWN0aW9uX2NhbmNlbChtX2Nvbm5lY3Rpb24pOwotICAgICAgICB4cGNfcmVsZWFz
ZShtX2Nvbm5lY3Rpb24pOworICAgICAgICB4cGNfY29ubmVjdGlvbl9jYW5jZWwobV9jb25uZWN0
aW9uLmdldCgpKTsKICAgICAgICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBpZiAobV9xdWV1ZSkgewotICAgICAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcXVldWUpOwotICAg
ICAgICBtX3F1ZXVlID0gbnVsbHB0cjsKLSAgICB9CisgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9
CiAKIE5TRGljdGlvbmFyeSAqUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbjo6ZGVzZXJpYWxp
emVNZXNzYWdlKHhwY19vYmplY3RfdCBvYmplY3QpCkBAIC0xNDcsNyArMTQwLDcgQEAgdm9pZCBS
ZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpoYW5kbGVFdmVudCh4cGNfb2JqZWN0X3Qgb2Jq
ZWN0KQogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIW1fdmFsaWRhdGVkKSB7CiAgICAgICAg
IGF1ZGl0X3Rva2VuX3QgdG9rZW47Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX2dldF9hdWRpdF90
b2tlbihtX2Nvbm5lY3Rpb24sICZ0b2tlbik7CisgICAgICAgIHhwY19jb25uZWN0aW9uX2dldF9h
dWRpdF90b2tlbihtX2Nvbm5lY3Rpb24uZ2V0KCksICZ0b2tlbik7CiAgICAgICAgIGlmICghV1RG
OjpoYXNFbnRpdGxlbWVudCh0b2tlbiwgImNvbS5hcHBsZS5wcml2YXRlLndlYmluc3BlY3Rvci53
ZWJpbnNwZWN0b3JkIikpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsK
ICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIG9uZSBsYXN0IFhQQ19FUlJPUl9DT05O
RUNUSU9OX0lOVkFMSUQgZXZlbnQgb24gdGhlIHF1ZXVlIGFuZCBkZXJlZiB1cy4KQEAgLTE5Mywx
MSArMTg2LDggQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpzZW5kTWVzc2Fn
ZShOU1N0cmluZyAqbWVzc2FnZU5hbWUsIE5TRGljdGlvbmEKIAogICAgIHhwY19vYmplY3RfdCBt
c2cgPSB4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCk7CiAgICAgeHBj
X2RpY3Rpb25hcnlfc2V0X3ZhbHVlKG1zZywgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvblNl
cmlhbGl6ZWRNZXNzYWdlS2V5LCB4cGNEaWN0aW9uYXJ5KTsKLSAgICB4cGNfcmVsZWFzZSh4cGNE
aWN0aW9uYXJ5KTsKLQotICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShtX2Nvbm5lY3Rp
b24sIG1zZyk7CiAKLSAgICB4cGNfcmVsZWFzZShtc2cpOworICAgIHhwY19jb25uZWN0aW9uX3Nl
bmRfbWVzc2FnZShtX2Nvbm5lY3Rpb24uZ2V0KCksIG1zZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3Rvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464950</attachid>
            <date>2023-02-10 16:16:57 -0800</date>
            <delta_ts>2025-02-23 19:31:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221107-20230210161657.patch</filename>
            <type>text/plain</type>
            <size>24378</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">RnJvbSA0NThhMjBmZGNkNmI5MTEyODBjNGRjYzMzMDI3MWE4M2I0ODUyMTY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0
ZTogVGh1LCA1IEphbiAyMDIzIDExOjU4OjEyIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSmF2YVNj
cmlwdENvcmUgc2hvdWxkIGJ1aWxkIHdpdGggQVJDIGVuYWJsZWQKIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExMDcgPHJkYXI6Ly83MzcyNjE5Nz4KCk9yaWdpbmFs
IHBhdGNoIGJ5IERhcmluIEFkbGVyIDxkYXJpbkBhcHBsZS5jb20+IG9uIDIwMjEtMDEtMjkKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKRW5hYmxlIEFSQyBmb3IgdGhlIEphdmFTY3JpcHRD
b3JlIHByb2plY3QuICBDaGFuZ2VzIGFyZSByZWxhdGVkCnRvIHRoZSBPYmplY3RpdmUtQyBBUEkg
YW5kIFJlbW90ZSBXZWIgSW5zcGVjdG9yLgoKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbToKKEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5h
bGl6ZSk6Ci0gU3dpdGNoIHRvIGFkb3B0Q0YoKSB0byBtYXRjaCB0eXBlIHVzZWQgYnkKICBKU0M6
OkhlYXA6Om1fZGVsYXllZFJlbGVhc2VPYmplY3RzLgooSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKLSBTaW1wbGlmeSBsb2dpYyAocGFy
dCBvZiBEYXJpbidzIG9yaWdpbmFsIHBhdGNoKS4KKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Ojpz
ZXRXcmFwcGVkT2JqZWN0KToKLSBTd2l0Y2ggdG8gdXNpbmcgQ0ZSZXRhaW4oKSBhcyAtcmV0YWlu
IGlzIG5vdCBhbGxvd2VkLgooSlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5J
bXBsKToKLSBTaW1wbGlmeSBsb2dpYyAocGFydCBvZiBEYXJpbidzIG9yaWdpbmFsIHBhdGNoKS4K
CiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW06CigtW0pTQ29udGV4dCBl
bnN1cmVXcmFwcGVyTWFwXSk6Ci0gU3RvcCBjYWxsaW5nIC1yZWxlYXNlIGFzIEFSQyB3aWxsIGRv
IHRoaXMgZm9yIHVzLgooLVtKU0NvbnRleHQgaW5pdF0pOgotIE5vIG5lZWQgdG8gdXNlIGFkb3B0
TlMoKSBhbnltb3JlLgooLVtKU0NvbnRleHQgZGVhbGxvY10pOgooLVtKU0NvbnRleHQgYmVnaW5D
YWxsYmFja1dpdGhEYXRhOmNhbGxlZVZhbHVlOnRoaXNWYWx1ZTphcmd1bWVudENvdW50OmFyZ3Vt
ZW50czpdKToKLSBDYWxsYmFja0RhdGEgc2hvdWxkIHJldGFpbiB0aGUgb2JqZWN0cyBmb3IgdXMu
CigtW0pTQ29udGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgooK1tKU0NvbnRleHQgY29udGV4
dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6XSk6CiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U01hbmFnZWRWYWx1ZS5tbToKKCtbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVl
Ol0pOgooK1tKU01hbmFnZWRWYWx1ZSBtYW5hZ2VkVmFsdWVXaXRoVmFsdWU6YW5kT3duZXI6XSk6
CigtW0pTTWFuYWdlZFZhbHVlIGRlYWxsb2NdKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0Lm1tOgooK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6d2l0aFNvdXJjZTphbmRTb3Vy
Y2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5lOmVycm9yOl0pOgooK1tKU1Nj
cmlwdCBzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3aXRoU291cmNlVVJM
OmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjpdKToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW06CigtW0pTVmFsdWUgZGVhbGxvY10pOgooLVtKU1Zh
bHVlIGluaXRXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKC1bSlNWaXJ0dWFsTWFjaGluZSBkZWFsbG9jXSk6Cigr
W0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgoq
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tOgooLVtKU09iakNDbGFz
c0luZm8gZGVhbGxvY10pOgooLVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFu
ZFByb3RvdHlwZUluQ29udGV4dDpdKToKKC1bSlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNz
Ol0pOgooLVtKU1dyYXBwZXJNYXAgb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOmluQ29udGV4dDpd
KToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgoo
SlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwpOgoqIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldENvY29hLm1t
OgooSW5zcGVjdG9yOjpSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ6OmNvbm5lY3Rpb25JZGVudGlm
aWVyIGNvbnN0KToKKEluc3BlY3Rvcjo6UmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0OjpkZXN0aW5h
dGlvbiBjb25zdCk6CiogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29j
b2EvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbToKKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yWFBDQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgoKKiBTb3VyY2UvV1RGL3d0Zi9Db21w
aWxlci5oOgooSUdOT1JFX0NMQU5HX1NUQVRJQ19BTkFMWVpFUl9XQVJOSU5HUyk6Ci0gQWRkIG1h
Y3JvIHRvIGlnbm9yZSBzdGF0aWMgYW5hbHl6ZXIgd2FybmluZ3MuCi0tLQogLi4uL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0gIHwgMTkgKysrKysrKysrLS0tLS0tLS0t
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gICAgICAgIHwgMTcgKysr
KysrLS0tLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUu
bW0gICB8ICA5ICsrKystLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bSAgICAgICAgIHwgIDggKysrKy0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZS5tbSAgICAgICAgICB8IDExICsrLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmUubW0gfCAgNyArKystLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTV3JhcHBlck1hcC5tbSAgICAgfCAxNSArKysrKysrLS0tLS0tLS0KIC4uLi9BUEkvT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24ubW0gICAgICAgICAgICAgICB8IDE2ICsrKysrKysrKystLS0tLS0K
IC4uLi9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnICAgICAgICAgICAgICB8ICAxICsKIC4u
Li9jb2NvYS9SZW1vdGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbSAgICB8ICA0ICsrLS0KIC4u
Li9jb2NvYS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tICAgICB8IDEyICsrKysrKyst
LS0tLQogU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCAgICAgICAgICAgICAgICAgICAgIHwgMTQg
KysrKysrKysrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDY0IGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElX
cmFwcGVyT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0KaW5kZXggOGJiYmViNzNiNjdjLi5hMzk1YzU1Y2Y2NWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCkBAIC00OCwyMiArNDgs
MjIgQEAgc3RhdGljIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKiBqc0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcigpCiAKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6
OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKIHsKLSAg
ICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCogd3JhcHBlck9iamVjdCA9IHN0YXRpY19jYXN0PEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBhdXRv
KiB3cmFwcGVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPiho
YW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9i
amVjdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9i
amVjdCktPnJlbGVhc2VTb29uKGFkb3B0TlMoc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSkpKTsKKyAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCkt
PnJlbGVhc2VTb29uKGFkb3B0Q0Yod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKSk7CiAg
ICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFu
ZGxlLnNsb3QoKSkpOwogfQogCiBib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
KQogewotICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpq
c0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwog
ICAgIC8vIFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFu
ZGxlcyB0byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKICAgICAvLyB0aGUgc2Ft
ZSBPYmplY3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxs
IG9mIHRoZSBnbG9iYWwgb2JqZWN0cyBhbGl2ZS4KLSAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndy
YXBwZWRPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9y
LmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYg
dmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgp
KTsKKyAgICBhdXRvKiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBw
ZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIHJldHVybiB3cmFwcGVyT2Jq
ZWN0LT53cmFwcGVkT2JqZWN0KCkKKyAgICAgICAgJiYgdmlzaXRvci5pc01hcmtlZCh3cmFwcGVy
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpCisgICAgICAgICYmIHZpc2l0b3Iu
Y29udGFpbnNPcGFxdWVSb290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTIyLDE3ICsxMjIsMTYgQEAgdm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojpz
ZXRXcmFwcGVkT2JqZWN0KHZvaWQqIHdyYXBwZWRPYmplY3QpCiB7CiAgICAgQVNTRVJUKCFtX3dy
YXBwZWRPYmplY3QpOwotICAgIG1fd3JhcHBlZE9iamVjdCA9IFtzdGF0aWNfY2FzdDxpZD4od3Jh
cHBlZE9iamVjdCkgcmV0YWluXTsKKyAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0
ID8gY29uc3RfY2FzdDx2b2lkKj4oQ0ZSZXRhaW4od3JhcHBlZE9iamVjdCkpIDogTlVMTDsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
SlNBUElXcmFwcGVyT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVy
T2JqZWN0Kj4oY2VsbCk7CisgICAgYXV0byogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTQVBJ
V3JhcHBlck9iamVjdCo+KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7CiAKLSAgICB2b2lkKiB3cmFwcGVkT2JqZWN0ID0gdGhpc09iamVjdC0+d3JhcHBlZE9i
amVjdCgpOwotICAgIGlmICh3cmFwcGVkT2JqZWN0KQorICAgIGlmIChhdXRvKiB3cmFwcGVkT2Jq
ZWN0ID0gdGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKQogICAgICAgICBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCh2aXNpdG9yLnZtKCksIHZpc2l0b3IsIHdyYXBwZWRPYmplY3QpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IDg4Nzk3NGI4NGFhMC4uNmI3
ZWM1MWY2MTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtNjUs
MTMgKzY1LDEzIEBAIC0gKHZvaWQpZW5zdXJlV3JhcHBlck1hcAogewogICAgIGlmICghdG9KUyhb
c2VsZiBKU0dsb2JhbENvbnRleHRSZWZdKS0+d3JhcHBlck1hcCgpKSB7CiAgICAgICAgIC8vIFRo
ZSBtYXAgd2lsbCBiZSByZXRhaW5lZCBieSB0aGUgR2xvYmFsT2JqZWN0IGluIGluaXRpYWxpemF0
aW9uLgotICAgICAgICBbW1tKU1dyYXBwZXJNYXAgYWxsb2NdIGluaXRXaXRoR2xvYmFsQ29udGV4
dFJlZjpbc2VsZiBKU0dsb2JhbENvbnRleHRSZWZdXSByZWxlYXNlXTsKKyAgICAgICAgKHZvaWQp
W1tKU1dyYXBwZXJNYXAgYWxsb2NdIGluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBKU0ds
b2JhbENvbnRleHRSZWZdXTsKICAgICB9CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CiB7Ci0g
ICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6YWRvcHROUyhbW0pTVmlydHVh
bE1hY2hpbmUgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRo
VmlydHVhbE1hY2hpbmU6W1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0XV07CiB9CiAKIC0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICop
dmlydHVhbE1hY2hpbmUKQEAgLTk3LDggKzk3LDYgQEAgLSAodm9pZClkZWFsbG9jCiB7CiAgICAg
bV9leGNlcHRpb24uY2xlYXIoKTsKICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKG1fY29udGV4
dCk7Ci0gICAgW19leGNlcHRpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9j
XTsKIH0KIAogLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdApA
QCAtMzgyLDkgKzM4MCw3IEBAIC0gKEJPT0wpYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFs
dWVSZWYpZXhjZXB0aW9uVmFsdWUKIC0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxs
YmFja0RhdGEgKiljYWxsYmFja0RhdGEgY2FsbGVlVmFsdWU6KEpTVmFsdWVSZWYpY2FsbGVlVmFs
dWUgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVudENvdW50OihzaXplX3Qp
YXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYgKilhcmd1bWVudHMKIHsK
ICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwotICAgIFtzZWxmIHJldGFp
bl07Ci0gICAgQ2FsbGJhY2tEYXRhICpwcmV2U3RhY2sgPSAoQ2FsbGJhY2tEYXRhICopdGhyZWFk
Lm1fYXBpRGF0YTsKLSAgICAqY2FsbGJhY2tEYXRhID0gQ2FsbGJhY2tEYXRhIHsgcHJldlN0YWNr
LCBzZWxmLCBzZWxmLmV4Y2VwdGlvbiwgY2FsbGVlVmFsdWUsIHRoaXNWYWx1ZSwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLCBuaWwgfTsKKyAgICAqY2FsbGJhY2tEYXRhID0gQ2FsbGJhY2tEYXRh
IHsgc3RhdGljX2Nhc3Q8Q2FsbGJhY2tEYXRhKj4odGhyZWFkLm1fYXBpRGF0YSksIHNlbGYsIHNl
bGYuZXhjZXB0aW9uLCBjYWxsZWVWYWx1ZSwgdGhpc1ZhbHVlLCBhcmd1bWVudENvdW50LCBhcmd1
bWVudHMsIG5pbCB9OwogICAgIHRocmVhZC5tX2FwaURhdGEgPSBjYWxsYmFja0RhdGE7CiAgICAg
c2VsZi5leGNlcHRpb24gPSBuaWw7CiB9CkBAIC0zOTQsNyArMzkwLDYgQEAgLSAodm9pZCllbmRD
YWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGEKICAgICBUaHJlYWQm
IHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwogICAgIHNlbGYuZXhjZXB0aW9uID0gY2FsbGJh
Y2tEYXRhLT5wcmVzZXJ2ZWRFeGNlcHRpb24uZ2V0KCk7CiAgICAgdGhyZWFkLm1fYXBpRGF0YSA9
IGNhbGxiYWNrRGF0YS0+bmV4dDsKLSAgICBbc2VsZiByZWxlYXNlXTsKIH0KIAogLSAoSlNWYWx1
ZSAqKXdyYXBwZXJGb3JPYmpDT2JqZWN0OihpZClvYmplY3QKQEAgLTQxNywxMCArNDEyLDEwIEBA
IC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNPYmplY3Q6KEpTVmFsdWVSZWYpdmFsdWUKICsgKEpT
Q29udGV4dCAqKWNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRS
ZWYpZ2xvYmFsQ29udGV4dAogewogICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5l
ID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRv
UmVmKCZ0b0pTKGdsb2JhbENvbnRleHQpLT52bSgpKV07Ci0gICAgYXV0byBjb250ZXh0ID0gcmV0
YWluUHRyKFt2aXJ0dWFsTWFjaGluZSBjb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjpnbG9iYWxD
b250ZXh0XSk7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3ZpcnR1YWxNYWNoaW5lIGNvbnRl
eHRGb3JHbG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdOwogICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgY29udGV4dCA9IGFkb3B0TlMoW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoR2xv
YmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0XSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYXV0b3Jl
bGVhc2UoKTsKKyAgICAgICAgY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aEds
b2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dF07CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFs
dWUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCmluZGV4
IDJjMmM3NDVhMDZkMy4uZGEwMmRhMTUxZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNNYW5hZ2VkVmFsdWUubW0KQEAgLTYxLDE0ICs2MSwxNCBAQCBAaW1wbGVtZW50YXRpb24g
SlNNYW5hZ2VkVmFsdWUgewogCiArIChKU01hbmFnZWRWYWx1ZSAqKW1hbmFnZWRWYWx1ZVdpdGhW
YWx1ZTooSlNWYWx1ZSAqKXZhbHVlCiB7Ci0gICAgcmV0dXJuIGFkb3B0TlMoW1tzZWxmIGFsbG9j
XSBpbml0V2l0aFZhbHVlOnZhbHVlXSkuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gW1tzZWxm
IGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlXTsKIH0KIAogKyAoSlNNYW5hZ2VkVmFsdWUgKilt
YW5hZ2VkVmFsdWVXaXRoVmFsdWU6KEpTVmFsdWUgKil2YWx1ZSBhbmRPd25lcjooaWQpb3duZXIK
IHsKLSAgICBhdXRvIG1hbmFnZWRWYWx1ZSA9IGFkb3B0TlMoW1tzZWxmIGFsbG9jXSBpbml0V2l0
aFZhbHVlOnZhbHVlXSk7Ci0gICAgW3ZhbHVlLmNvbnRleHQudmlydHVhbE1hY2hpbmUgYWRkTWFu
YWdlZFJlZmVyZW5jZTptYW5hZ2VkVmFsdWUuZ2V0KCkgd2l0aE93bmVyOm93bmVyXTsKLSAgICBy
ZXR1cm4gbWFuYWdlZFZhbHVlLmF1dG9yZWxlYXNlKCk7CisgICAgSlNNYW5hZ2VkVmFsdWUgKm1h
bmFnZWRWYWx1ZSA9IFtbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZV07CisgICAgW3Zh
bHVlLmNvbnRleHQudmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTptYW5hZ2VkVmFs
dWUgd2l0aE93bmVyOm93bmVyXTsKKyAgICByZXR1cm4gbWFuYWdlZFZhbHVlOwogfQogCiAtIChp
bnN0YW5jZXR5cGUpaW5pdApAQCAtMTE5LDcgKzExOSw2IEBAIC0gKHZvaWQpZGVhbGxvYwogICAg
IH0KIAogICAgIFtzZWxmIGRpc2Nvbm5lY3RWYWx1ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwog
fQogCiAtICh2b2lkKWRpZEFkZE93bmVyOihpZClvd25lcgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHQubW0KaW5kZXggODhjNDI5MmQ2MWRkLi5lN2YwMzJmMmIxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpAQCAtMTEzLDE0ICsxMTMsMTQgQEAgKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgYW4KICAgICBpZiAoIXZhbGlkYXRlQnl0ZWNvZGVDYWNoZVBhdGgoY2FjaGVQ
YXRoLCBlcnJvcikpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIHJlc3VsdCA9IGFk
b3B0TlMoW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0pOworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKICAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2
bTsKICAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNv
dXJjZTsKICAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwogICAgIHJlc3VsdC0+
bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CiAgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOwotICAgIHJl
dHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiArIChp
bnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291
cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBlcnJvcjoob3V0IE5TRXJyb3IgKiopZXJyb3IKQEAg
LTE0MSw3ICsxNDEsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5
cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VSTAogICAgIGlmICghY2hhcmFj
dGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5k
YXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAl
QCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJv
cik7CiAKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0p
OworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKICAgICBy
ZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKICAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7
CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0
Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxl
RGF0YS5zaXplKCkpKTsKQEAgLTE0OSw3ICsxNDksNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0
T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VS
TAogICAgIHJlc3VsdC0+bV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CiAgICAgcmVzdWx0LT5tX2Nh
Y2hlUGF0aCA9IGNhY2hlUGF0aDsKICAgICBbcmVzdWx0IHJlYWRDYWNoZV07Ci0gICAgcmV0dXJu
IHJlc3VsdC5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC0gKHZvaWQp
cmVhZENhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUu
bW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0KaW5kZXggYjkxNmNjMDJk
OGQyLi40NTQ2NDhkM2QwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWYWx1ZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0KQEAg
LTc1LDEwICs3NSw4IEBAIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChfY29udGV4dCkgewog
ICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBt
X3ZhbHVlKTsKLSAgICAgICAgW19jb250ZXh0IHJlbGVhc2VdOwogICAgICAgICBfY29udGV4dCA9
IG5pbDsKICAgICB9Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAtIChOU1N0cmluZyAqKWRl
c2NyaXB0aW9uCkBAIC0xMTA5LDE2ICsxMTA3LDExIEBAIC0gKEpTVmFsdWUgKilpbml0CiAKIC0g
KEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAogewotICAgIGlmICghdmFsdWUgfHwgIWNvbnRleHQpIHsKLSAgICAg
ICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCiAgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCisgICAgaWYgKCFzZWxmIHx8ICF2YWx1
ZSB8fCAhY29udGV4dCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF9jb250ZXh0ID0gW2Nv
bnRleHQgcmV0YWluXTsKKyAgICBfY29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV92YWx1ZSA9IHZh
bHVlOwogICAgIEpTVmFsdWVQcm90ZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBt
X3ZhbHVlKTsKICAgICByZXR1cm4gc2VsZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZS5tbQppbmRleCAwN2QwZWUzZDE4NTYuLjAwZjhkOGJlMGY0YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMTI2
LDcgKzEyNiw2IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRleHRHcm91cFJlZjooSlND
b250ZXh0R3JvdXBSZWYpZ3JvdXAKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpTQ29udGV4dEdy
b3VwUmVsZWFzZShtX2dyb3VwKTsKLSAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIHN0YXRpYyBp
ZCBnZXRJbnRlcm5hbE9iamNPYmplY3QoaWQgb2JqZWN0KQpAQCAtMjM5LDEwICsyMzgsMTAgQEAg
SlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFj
aGluZSAqdmlydHVhbE1hY2hpbmUpCiAKICsgKEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFj
aGluZVdpdGhDb250ZXh0R3JvdXBSZWY6KEpTQ29udGV4dEdyb3VwUmVmKWdyb3VwCiB7Ci0gICAg
YXV0byB2aXJ0dWFsTWFjaGluZSA9IHJldGFpblB0cihbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVy
Rm9ySlNDb250ZXh0R3JvdXBSZWY6Z3JvdXBdKTsKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0
dWFsTWFjaGluZSA9IFtKU1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJl
Zjpncm91cF07CiAgICAgaWYgKCF2aXJ0dWFsTWFjaGluZSkKLSAgICAgICAgdmlydHVhbE1hY2hp
bmUgPSBhZG9wdE5TKFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdFdpdGhDb250ZXh0R3Jv
dXBSZWY6Z3JvdXBdKTsKLSAgICByZXR1cm4gdmlydHVhbE1hY2hpbmUuYXV0b3JlbGVhc2UoKTsK
KyAgICAgICAgdmlydHVhbE1hY2hpbmUgPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRX
aXRoQ29udGV4dEdyb3VwUmVmOmdyb3VwXTsKKyAgICByZXR1cm4gdmlydHVhbE1hY2hpbmU7CiB9
CiAKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENv
bnRleHRSZWYpZ2xvYmFsQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1dyYXBwZXJNYXAubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBl
ck1hcC5tbQppbmRleCA4ODE0MGI5ODNiNDAuLjMzOTgwZGM3MzZlMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KQEAgLTQyMSw3ICs0MjEsNiBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdEZvckNsYXNzOihDbGFzcyljbHMKIC0gKHZvaWQpZGVhbGxvYwogewogICAg
IEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYuZ2V0KCkpOwotICAgIFtzdXBlciBkZWFsbG9jXTsK
IH0KIAogc3RhdGljIEpTQzo6SlNPYmplY3QqIGFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21D
bGFzcyhKU0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgQ2xhc3MgY2xz
KQpAQCAtNTEzLDggKzUxMiw4IEBAIC0gKENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcilhbGxvY2F0
ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlSW5Db250ZXh0OihKU0NvbnRleHQKIAogICAgICAgICBQ
cm90b2NvbCAqZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7CiAgICAgICAg
IGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKG1fY2xhc3MsIGV4cG9ydFByb3Rv
Y29sLCBeKFByb3RvY29sICpwcm90b2NvbCwgYm9vbCYpewotICAgICAgICAgICAgY29weVByb3Rv
dHlwZVByb3BlcnRpZXMoY29udGV4dCwgbV9jbGFzcywgcHJvdG9jb2wsIHByb3RvdHlwZSk7Ci0g
ICAgICAgICAgICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIG1fY2xhc3MsIHByb3RvY29s
LCBOTywgY29uc3RydWN0b3IpOworICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3BlcnRpZXMo
Y29udGV4dCwgc2VsZi0+bV9jbGFzcywgcHJvdG9jb2wsIHByb3RvdHlwZSk7CisgICAgICAgICAg
ICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIHNlbGYtPm1fY2xhc3MsIHByb3RvY29sLCBO
TywgY29uc3RydWN0b3IpOwogICAgICAgICB9KTsKIAogICAgICAgICAvLyBTZXQgW1Byb3RvdHlw
ZV0uCkBAIC02MzAsNyArNjI5LDcgQEAgLSAoSlNPYmpDQ2xhc3NJbmZvKiljbGFzc0luZm9Gb3JD
bGFzczooQ2xhc3MpY2xzCiAgICAgICAgICAgICByZXR1cm4gbV9jbGFzc01hcC5nZXQoKVsoaWQp
Y2xzXSA9IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MoY2xzKV07
CiAgICAgfQogCi0gICAgcmV0dXJuIG1fY2xhc3NNYXAuZ2V0KClbKGlkKWNsc10gPSBhZG9wdE5T
KFtbSlNPYmpDQ2xhc3NJbmZvIGFsbG9jXSBpbml0Rm9yQ2xhc3M6Y2xzXSkuZ2V0KCk7CisgICAg
cmV0dXJuIG1fY2xhc3NNYXAuZ2V0KClbKGlkKWNsc10gPSBbW0pTT2JqQ0NsYXNzSW5mbyBhbGxv
Y10gaW5pdEZvckNsYXNzOmNsc107CiB9CiAKIC0gKEpTVmFsdWUgKilqc1dyYXBwZXJGb3JPYmpl
Y3Q6KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKQEAgLTY1OSwxMiAr
NjU4LDEyIEBAIC0gKEpTVmFsdWUgKilqc1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdCBpbkNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIC0gKEpTVmFsdWUgKilvYmpjV3JhcHBlckZvckpT
VmFsdWVSZWY6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OmNvbnRleHQKIHsKICAgICBBU1NF
UlQodG9KU0dsb2JhbE9iamVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKS0+d3JhcHBl
ck1hcCgpID09IHNlbGYpOwotICAgIGF1dG8gd3JhcHBlciA9IHJldGFpblB0cigoX19icmlkZ2Ug
SlNWYWx1ZSAqKU5TTWFwR2V0KG1fY2FjaGVkT2JqQ1dyYXBwZXJzLmdldCgpLCB2YWx1ZSkpOwor
ICAgIEpTVmFsdWUgKndyYXBwZXIgPSAoX19icmlkZ2UgSlNWYWx1ZSAqKU5TTWFwR2V0KG1fY2Fj
aGVkT2JqQ1dyYXBwZXJzLmdldCgpLCB2YWx1ZSk7CiAgICAgaWYgKCF3cmFwcGVyKSB7Ci0gICAg
ICAgIHdyYXBwZXIgPSBhZG9wdE5TKFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1
ZSBpbkNvbnRleHQ6Y29udGV4dF0pOwotICAgICAgICBOU01hcEluc2VydChtX2NhY2hlZE9iakNX
cmFwcGVycy5nZXQoKSwgdmFsdWUsIChfX2JyaWRnZSB2b2lkKil3cmFwcGVyLmdldCgpKTsKKyAg
ICAgICAgd3JhcHBlciA9IFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNv
bnRleHQ6Y29udGV4dF07CisgICAgICAgIE5TTWFwSW5zZXJ0KG1fY2FjaGVkT2JqQ1dyYXBwZXJz
LmdldCgpLCB2YWx1ZSwgKF9fYnJpZGdlIHZvaWQqKXdyYXBwZXIpOwogICAgIH0KLSAgICByZXR1
cm4gd3JhcHBlci5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiB3cmFwcGVyOwogfQogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0
aW9uLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5t
bQppbmRleCA5ZGRkMGQ5NGEyOWUuLmU5MzI1NjRkNTkxMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCkBAIC00MjcsNyArNDI3LDcg
QEAgcHVibGljOgogICAgICAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVsZWFzZSB0aGUg
dGFyZ2V0IHNpbmNlIHdlIGRpZG4ndCBjYWxsIAogICAgICAgICAvLyAtcmV0YWluQXJndW1lbnRz
IG9uIG1faW52b2NhdGlvbiAoYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gc28pLgogICAgICAgICBp
ZiAobV90eXBlID09IENhbGxiYWNrQmxvY2sgfHwgbV90eXBlID09IENhbGxiYWNrQ2xhc3NNZXRo
b2QpCi0gICAgICAgICAgICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0TlMoW21faW52b2NhdGlvbi5n
ZXQoKSB0YXJnZXRdKSk7CisgICAgICAgICAgICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0Q0YoKF9f
YnJpZGdlIENGVHlwZVJlZilbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0pKTsKICAgICAgICAg
bV9pbnN0YW5jZUNsYXNzID0gbmlsOwogICAgIH0KIApAQCAtNTg1LDEyICs1ODUsMTEgQEAgSlNW
YWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0
LCBKU09iamVjdFJlZiB0aGlzT2IKICAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9u
KTsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0IEpTR2xvYmFs
Q29udGV4dFJlZl07CiAKLSAgICBpZCB0YXJnZXQ7CiAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIENhbGxiYWNrSW5pdE1ldGhvZDogewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdCk7Ci0gICAgICAgIHRhcmdldCA9IFtt
X2luc3RhbmNlQ2xhc3MgYWxsb2NdOworICAgICAgICBpZCB0YXJnZXQgPSBbbV9pbnN0YW5jZUNs
YXNzIGFsbG9jXTsKICAgICAgICAgaWYgKCF0YXJnZXQgfHwgIVt0YXJnZXQgaXNLaW5kT2ZDbGFz
czptX2luc3RhbmNlQ2xhc3MuZ2V0KCldKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0UmVmKSwgInNlbGYgdHlwZSBjaGVj
ayBmYWlsZWQgZm9yIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZCJfcykpOwogICAgICAgICAg
ICAgaWYgKCpleGNlcHRpb24pCkBAIC01OTgsMTEgKzU5NywxNCBAQCBKU1ZhbHVlUmVmIE9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbDo6Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVm
IHRoaXNPYgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRS
ZWYpOwogICAgICAgICB9CiAgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07
CisjaWYgSUdOT1JFX0NMQU5HX1NUQVRJQ19BTkFMWVpFUl9XQVJOSU5HUygib3N4LmNvY29hLlJl
dGFpbkNvdW50IikKKyAgICAgICAgQ0ZSZXRhaW4oKF9fYnJpZGdlIENGVHlwZVJlZil0YXJnZXQp
OyAvLyBTZWUgQ0ZBdXRvcmVsZWFzZSgpIGJlbG93LgorI2VuZGlmCiAgICAgICAgIGZpcnN0QXJn
dW1lbnQgPSAyOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDYWxsYmFja0luc3Rh
bmNlTWV0aG9kOiB7Ci0gICAgICAgIHRhcmdldCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4
dFJlZiwgdGhpc09iamVjdCk7CisgICAgICAgIGlkIHRhcmdldCA9IHRyeVVud3JhcE9iamNPYmpl
Y3QoY29udGV4dFJlZiwgdGhpc09iamVjdCk7CiAgICAgICAgIGlmICghdGFyZ2V0IHx8ICFbdGFy
Z2V0IGlzS2luZE9mQ2xhc3M6bV9pbnN0YW5jZUNsYXNzLmdldCgpXSkgewogICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dFJlZiks
ICJzZWxmIHR5cGUgY2hlY2sgZmFpbGVkIGZvciBPYmplY3RpdmUtQyBpbnN0YW5jZSBtZXRob2Qi
X3MpKTsKICAgICAgICAgICAgIGlmICgqZXhjZXB0aW9uKQpAQCAtNjM1LDE0ICs2MzcsMTYgQEAg
SlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250
ZXh0LCBKU09iamVjdFJlZiB0aGlzT2IKICAgICBpZiAoKmV4Y2VwdGlvbikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICAvLyBCYWxhbmNlIG91ciBjYWxsIHRvIC1hbGxvYyB3aXRoIGEg
Y2FsbCB0byAtYXV0b3JlbGVhc2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBhZnRlciBjYWxsaW5nIC1p
bml0CisjaWYgSUdOT1JFX0NMQU5HX1NUQVRJQ19BTkFMWVpFUl9XQVJOSU5HUygib3N4LmNvY29h
LlJldGFpbkNvdW50IikKKyAgICAvLyBCYWxhbmNlIG91ciBjYWxsIHRvIENGUmV0YWluIHdpdGgg
YSBjYWxsIHRvIENGQXV0b3JlbGVhc2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBhZnRlciBjYWxsaW5n
IGluaXQKICAgICAvLyBiZWNhdXNlIGluaXQgZmFtaWx5IG1ldGhvZHMgYXJlIGFsbG93ZWQgdG8g
cmVsZWFzZSB0aGUgYWxsb2NhdGVkIG9iamVjdCBhbmQgcmV0dXJuIHNvbWV0aGluZyAKICAgICAv
LyBlbHNlIGluIGl0cyBwbGFjZS4KICAgICBpZiAobV90eXBlID09IENhbGxiYWNrSW5pdE1ldGhv
ZCkgewogICAgICAgICBpZCBvYmpjUmVzdWx0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0
UmVmLCByZXN1bHQpOwogICAgICAgICBpZiAob2JqY1Jlc3VsdCkKLSAgICAgICAgICAgIFtvYmpj
UmVzdWx0IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIENGQXV0b3JlbGVhc2UoKF9fYnJpZGdl
IENGVHlwZVJlZilvYmpjUmVzdWx0KTsKICAgICB9CisjZW5kaWYKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMv
QmFzZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCmluZGV4IDhlNDlhZjQ5OGVmNS4uZDljMTI1NzBkNmI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAtMjcs
NiArMjcsNyBAQCBBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKIAogQ0xBTkdfQ1hYX0xB
TkdVQUdFX1NUQU5EQVJEID0gYysrMmE7CiBDTEFOR19DWFhfTElCUkFSWSA9IGxpYmMrKzsKK0NM
QU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKIENMQU5HX0VOQUJMRV9PQkpDX1dFQUsgPSBZRVM7
CiBDTEFOR19XQVJOX0JMT0NLX0NBUFRVUkVfQVVUT1JFTEVBU0lORyA9IFlFUzsKIENMQU5HX1dB
Uk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2Eu
bW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVD
b25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbQppbmRleCBjMzExZDhiZTc0ODAuLjBlNzU0ODdiNWZm
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29j
b2EvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29j
b2EubW0KQEAgLTEyNywxMiArMTI3LDEyIEBAIHN0ZDo6b3B0aW9uYWw8VGFyZ2V0SUQ+IFJlbW90
ZUNvbm5lY3Rpb25Ub1RhcmdldDo6dGFyZ2V0SWRlbnRpZmllcigpIGNvbnN0CiAKIE5TU3RyaW5n
ICpSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ6OmNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gYWRvcHROUyhbbV9jb25uZWN0aW9uSWRlbnRpZmllciBjb3B5XSkuYXV0
b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gW21fY29ubmVjdGlvbklkZW50aWZpZXIgY29weV07CiB9
CiAKIE5TU3RyaW5nICpSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ6OmRlc3RpbmF0aW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYWRvcHROUyhbbV9kZXN0aW5hdGlvbiBjb3B5XSkuYXV0b3JlbGVh
c2UoKTsKKyAgICByZXR1cm4gW21fZGVzdGluYXRpb24gY29weV07CiB9CiAKIHZvaWQgUmVtb3Rl
Q29ubmVjdGlvblRvVGFyZ2V0OjpkaXNwYXRjaEFzeW5jT25UYXJnZXQoRnVuY3Rpb248dm9pZCAo
KT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uLm1tCmluZGV4IGFlZmY2OGI0Nzk4My4uZjcwNTA0MmYxMzI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNw
ZWN0b3JYUENDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcmVtb3RlL2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0KQEAgLTM3LDYg
KzM3LDcgQEAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9jZi9UeXBl
Q2FzdHNDRi5oPgogI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL1R5cGVDYXN0c0NvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL0NGWFBD
QnJpZGdlU1BJLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CiAjaW1w
b3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KQEAgLTE3NSwxOSArMTc2LDIwIEBAIHZvaWQg
UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2UoTlNTdHJpbmcgKm1lc3Nh
Z2VOYW1lLCBOU0RpY3Rpb25hCiAgICAgaWYgKG1fY2xvc2VkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF0pOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpt
ZXNzYWdlTmFtZSBmb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbk1lc3NhZ2VOYW1l
S2V5XTsKICAgICBpZiAodXNlckluZm8pCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp1
c2VySW5mbyBmb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvblVzZXJJbmZvS2V5XTsK
IAotICAgIGF1dG8geHBjRGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoX0NGWFBDQ3JlYXRlWFBD
TWVzc2FnZVdpdGhDRk9iamVjdCgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKWRpY3Rpb25hcnku
Z2V0KCkpKTsKKyAgICBhdXRvIHhwY0RpY3Rpb25hcnkgPSBhZG9wdE9TT2JqZWN0KF9DRlhQQ0Ny
ZWF0ZVhQQ01lc3NhZ2VXaXRoQ0ZPYmplY3QoYnJpZGdlX2Nhc3QoZGljdGlvbmFyeSkpKTsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKHhwY0RpY3Rpb25hcnkgJiYgeHBjX2dldF90eXBlKHhwY0Rp
Y3Rpb25hcnkuZ2V0KCkpID09IFhQQ19UWVBFX0RJQ1RJT05BUlksICJVbmFibGUgdG8gc2VyaWFs
aXplIHhwYyBtZXNzYWdlIik7CiAgICAgaWYgKCF4cGNEaWN0aW9uYXJ5KQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIG1zZyA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRl
KG51bGxwdHIsIG51bGxwdHIsIDApKTsKLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfdmFsdWUobXNn
LmdldCgpLCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uU2VyaWFsaXplZE1lc3NhZ2VLZXks
IHhwY0RpY3Rpb25hcnkuZ2V0KCkpOwotICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZSht
X2Nvbm5lY3Rpb24uZ2V0KCksIG1zZy5nZXQoKSk7CisgICAgeHBjX29iamVjdF90IG1zZyA9IHhw
Y19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKTsKKyAgICB4cGNfZGljdGlv
bmFyeV9zZXRfdmFsdWUobXNnLCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uU2VyaWFsaXpl
ZE1lc3NhZ2VLZXksIHhwY0RpY3Rpb25hcnkuZ2V0KCkpOworCisgICAgeHBjX2Nvbm5lY3Rpb25f
c2VuZF9tZXNzYWdlKG1fY29ubmVjdGlvbi5nZXQoKSwgbXNnKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oIGIvU291
cmNlL1dURi93dGYvQ29tcGlsZXIuaAppbmRleCA2MjZmNmY4MTYyZjMuLjY4ZTVkNjkwNGE2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9Db21waWxlci5oCkBAIC01MjQsNiArNTI0LDIwIEBACiAjZGVmaW5lIElHTk9SRV9OVUxMX0NI
RUNLX1dBUk5JTkdTX0JFR0lOIElHTk9SRV9XQVJOSU5HU19CRUdJTigibm9ubnVsbCIpCiAjZGVm
aW5lIElHTk9SRV9OVUxMX0NIRUNLX1dBUk5JTkdTX0VORCBJR05PUkVfV0FSTklOR1NfRU5ECiAK
Ky8qIElHTk9SRV9DTEFOR19TVEFUSUNfQU5BTFlaRVJfV0FSTklOR1MgKi8KKworLy8gQ3VycmVu
dGx5LCB0aGVyZSBpcyBubyB3YXkgdG8gaWdub3JlIHNwZWNpZmljIGNsYW5nIHN0YXRpYyBhbmFs
eXplciB3YXJuaW5nczoKKy8vIDxodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3Qv
aXNzdWVzLzc2Njg+CisvLworLy8gVGhpcyBtYWNybyBsZXRzIHVzIGRvY3VtZW50IHdoaWNoIHdh
cm5pbmdzIGFyZSBiZWluZyBpZ25vcmVkIChpbiBjYXNlIHRoYXQKKy8vIGNoYW5nZXMgaW4gdGhl
IGZ1dHVyZSkgYnkgY29tbWVudGluZyBvdXQgdGhlIGNvZGUgZHVyaW5nIGFuYWx5c2lzLgorCisj
aWYgQ09NUElMRVIoQ0xBTkcpICYmIGRlZmluZWQoX19jbGFuZ19hbmFseXplcl9fKQorI2RlZmlu
ZSBJR05PUkVfQ0xBTkdfU1RBVElDX0FOQUxZWkVSX1dBUk5JTkdTKC4uLikgMAorI2Vsc2UKKyNk
ZWZpbmUgSUdOT1JFX0NMQU5HX1NUQVRJQ19BTkFMWVpFUl9XQVJOSU5HUyguLi4pIDEKKyNlbmRp
ZgorCiAvKiBOT19VTklRVUVfQUREUkVTUyAqLwogCiAjaWYgIWRlZmluZWQoTk9fVU5JUVVFX0FE
RFJFU1MpICYmIGRlZmluZWQoX19oYXNfY3BwX2F0dHJpYnV0ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>474320</attachid>
            <date>2025-02-23 19:31:33 -0800</date>
            <delta_ts>2025-02-24 11:43:42 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>0001-JavaScriptCore-should-build-with-ARC-enabled-on-290921@main-v3.patch</filename>
            <type>text/plain</type>
            <size>29178</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">RnJvbSBmZjUxNjVmZGU3NzFmMzg1ZjM5MmYyYzExZTI3NDBkNGM1MjUyNmQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0
ZTogV2VkLCAyMiBGZWIgMjAyMyAxMDo0ODozMiAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEphdmFT
Y3JpcHRDb3JlIHNob3VsZCBidWlsZCB3aXRoIEFSQyBlbmFibGVkCiA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTEwNz4gPHJkYXI6Ly83MzcyNjE5Nz4KCk9yaWdp
bmFsIHBhdGNoIGJ5IERhcmluIEFkbGVyIDxkYXJpbkBhcHBsZS5jb20+IG9uIDIwMjEtMDEtMjku
CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkVuYWJsZSBBUkMgZm9yIHRoZSBKYXZhU2Ny
aXB0Q29yZSBwcm9qZWN0LiAgQ2hhbmdlcyBhcmUgcmVsYXRlZAp0byB0aGUgT2JqZWN0aXZlLUMg
QVBJIGFuZCBSZW1vdGUgV2ViIEluc3BlY3Rvci4KCiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0FQSVdyYXBwZXJPYmplY3QubW06CihKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUpOgotIFN3aXRjaCB0byBhZG9wdENGKCkgdG8gbWF0Y2ggdHlwZSB1c2VkIGJ5CiAg
SlNDOjpIZWFwOjptX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cy4KKEpTQVBJV3JhcHBlck9iamVjdEhh
bmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6Ci0gU2ltcGxpZnkgbG9naWMg
KHBhcnQgb2YgRGFyaW4ncyBvcmlnaW5hbCBwYXRjaCkuCihKU0M6OkpTQVBJV3JhcHBlck9iamVj
dDo6c2V0V3JhcHBlZE9iamVjdCk6Ci0gU3dpdGNoIHRvIHVzaW5nIENGUmV0YWluKCkgYXMgLXJl
dGFpbiBpcyBub3QgYWxsb3dlZC4KKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbCk6Ci0gU2ltcGxpZnkgbG9naWMgKHBhcnQgb2YgRGFyaW4ncyBvcmlnaW5hbCBwYXRj
aCkuCiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JlbW90ZUluc3BlY3Rvci5jcHA6CihK
U1JlbW90ZUluc3BlY3RvclNldFBhcmVudFByb2Nlc3NJbmZvcm1hdGlvbik6Ci0gVXBkYXRlIHRv
IHBhc3MgQ0ZEYXRhUmVmIHRvCiAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBhcmVu
dFByb2Nlc3NJbmZvcm1hdGlvbigpLgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tOgooLVtKU0NvbnRleHQgZW5zdXJlV3JhcHBlck1hcF0pOgotIFN0b3AgY2FsbGluZyAt
cmVsZWFzZSBhcyBBUkMgd2lsbCBkbyB0aGlzIGZvciB1cy4KKC1bSlNDb250ZXh0IGluaXRdKToK
LSBObyBuZWVkIHRvIHVzZSBhZG9wdE5TKCkgYW55bW9yZS4KKC1bSlNDb250ZXh0IGRlYWxsb2Nd
KToKKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0YTpjYWxsZWVWYWx1ZTp0aGlzVmFs
dWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6Ci0gQ2FsbGJhY2tEYXRhIHNob3VsZCByZXRh
aW4gdGhlIG9iamVjdHMgZm9yIHVzLgooLVtKU0NvbnRleHQgZW5kQ2FsbGJhY2tXaXRoRGF0YTpd
KToKKCtbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOl0pOgoqIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW06CigrW0pTTWFuYWdlZFZhbHVl
IG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpdKToKKCtbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVl
V2l0aFZhbHVlOmFuZE93bmVyOl0pOgooLVtKU01hbmFnZWRWYWx1ZSBkZWFsbG9jXSk6CiogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbToKKCtbSlNTY3JpcHQgc2NyaXB0T2ZU
eXBlOndpdGhTb3VyY2U6YW5kU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFj
aGluZTplcnJvcjpdKToKKCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOm1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6d2l0aFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmluVmlydHVhbE1hY2hpbmU6
ZXJyb3I6XSk6CiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tOgooLVtKU1Zh
bHVlIGRlYWxsb2NdKToKKC1bSlNWYWx1ZSBpbml0V2l0aFZhbHVlOmluQ29udGV4dDpdKToKKiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW06CigtW0pTVmlydHVh
bE1hY2hpbmUgZGVhbGxvY10pOgooK1tKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0
aENvbnRleHRHcm91cFJlZjpdKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBl
ck1hcC5tbToKKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKC1bSlNPYmpDQ2xhc3NJbmZv
IGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVJbkNvbnRleHQ6XSk6CigtW0pTV3JhcHBl
ck1hcCBjbGFzc0luZm9Gb3JDbGFzczpdKToKKC1bSlNXcmFwcGVyTWFwIG9iamNXcmFwcGVyRm9y
SlNWYWx1ZVJlZjppbkNvbnRleHQ6XSk6CiogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbToKKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxs
KToKCiogU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6
CihDTEFOR19FTkFCTEVfT0JKQ19XRUFLKTogRGVsZXRlLgooQ0xBTkdfRU5BQkxFX09CSkNfQVJD
KTogQWRkLgotIEVuYWJsZSBBUkMsIHdoaWNoIGluY2x1ZGVzIHdlYWsgc3VwcG9ydC4KCiogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6CihJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKToK
LSBTd2l0Y2ggcGFyYW1ldGVyIGZyb20gUmV0YWluUHRyPENGRGF0YVJlZj4gdG8gQ0ZEYXRhUmVm
IGluCiAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBhcmVudFByb2Nlc3NJbmZvcm1h
dGlvbigpLgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1Jl
bW90ZUNvbm5lY3Rpb25Ub1RhcmdldENvY29hLm1tOgooSW5zcGVjdG9yOjpSZW1vdGVDb25uZWN0
aW9uVG9UYXJnZXQ6OmNvbm5lY3Rpb25JZGVudGlmaWVyIGNvbnN0KToKKEluc3BlY3Rvcjo6UmVt
b3RlQ29ubmVjdGlvblRvVGFyZ2V0OjpkZXN0aW5hdGlvbiBjb25zdCk6CiogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlSW5zcGVjdG9yQ29jb2EubW06
CihJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9u
KToKLSBTd2l0Y2ggcGFyYW1ldGVyIGZyb20gUmV0YWluUHRyPENGRGF0YVJlZj4gdG8gQ0ZEYXRh
UmVmIGluCiAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBhcmVudFByb2Nlc3NJbmZv
cm1hdGlvbigpLgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29h
L1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW06CihJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb246OnNlbmRNZXNzYWdlKToKCiogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgooV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJv
Y2Vzcyk6CiogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tOgooLVtX
ZWJWaWV3IF9zZXRIb3N0QXBwbGljYXRpb25Qcm9jZXNzSWRlbnRpZmllcjphdWRpdFRva2VuOl0p
OgotIFN3aXRjaCBwYXJhbWV0ZXIgZnJvbSBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0byBDRkRhdGFS
ZWYgd2hlbiBjYWxsaW5nCiAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBhcmVudFBy
b2Nlc3NJbmZvcm1hdGlvbigpLgotLS0KIC4uLi9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFw
cGVyT2JqZWN0Lm1tICB8IDE5ICsrKysrKysrKy0tLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tICAgICAgICB8IDE3ICsrKysrKy0tLS0tLS0tLS0tCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tICAgfCAgOSArKysrLS0tLS0K
IC4uLi9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZW1vdGVJbnNwZWN0b3IuY3BwICB8ICAyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tICAgICAgICAgfCAgOCArKysrLS0t
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tICAgICAgICAgIHwgMTUgKysr
LS0tLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gfCAgNyArKystLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5t
bSAgICAgfCAxNSArKysrKysrLS0tLS0tLS0KIC4uLi9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
bW0gICAgICAgICAgICAgICB8IDE2ICsrKysrKysrKystLS0tLS0KIC4uLi9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnICAgICAgICAgICAgICB8ICAyICstCiAuLi4vaW5zcGVjdG9yL3JlbW90
ZS9SZW1vdGVJbnNwZWN0b3IuaCAgICAgICAgfCAgMiArLQogLi4uL2NvY29hL1JlbW90ZUNvbm5l
Y3Rpb25Ub1RhcmdldENvY29hLm1tICAgIHwgIDQgKystLQogLi4uL3JlbW90ZS9jb2NvYS9SZW1v
dGVJbnNwZWN0b3JDb2NvYS5tbSAgICAgIHwgIDIgKy0KIC4uLi9jb2NvYS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tICAgICB8IDEyICsrKysrKystLS0tLQogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSAgICB8ICAyICstCiAxNiBmaWxlcyBjaGFuZ2VkLCA2
MSBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCmluZGV4IDQ1ZGJiNTczNWY1Mi4uNmQyNWIx
MWFkOWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBl
ck9iamVjdC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5tbQpAQCAtNDgsMjIgKzQ4LDIyIEBAIHN0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKQogCiB2b2lkIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCopCiB7Ci0gICAgSlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQo
KS5hc0NlbGwoKSk7CisgICAgYXV0byogd3JhcHBlck9iamVjdCA9IHN0YXRpY19jYXN0PEpTQzo6
SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBpZiAoIXdy
YXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlND
OjpIZWFwOjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxlYXNlU29vbihhZG9wdE5TKHN0YXRpY19j
YXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpKSk7CisgICAgSlNDOjpIZWFw
OjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxlYXNlU29vbihhZG9wdENGKHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSkpOwogICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6Oldl
YWtJbXBsOjphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKIH0KIAogYm9vbCBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IsIEFTQ0lJTGl0ZXJhbCopCiB7Ci0gICAgSlNDOjpKU0FQSVdyYXBwZXJPYmplY3Qq
IHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhh
bmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgLy8gV2UgdXNlIHRoZSBKU0dsb2JhbE9iamVjdCB3
aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQgdGhlIHNpdHVhdGlvbiB3aGVy
ZSB1c2luZwogICAgIC8vIHRoZSBzYW1lIE9iamVjdGl2ZS1DIG9iamVjdCBpbiBtdWx0aXBsZSBn
bG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBvYmplY3RzIGFsaXZlLgotICAg
IGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHZpc2l0b3IuaXNNYXJrZWQod3JhcHBlck9iamVjdC0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVy
T2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworICAgIGF1dG8qIHdyYXBwZXJPYmplY3QgPSBKU0M6
OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7
CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKQorICAgICAgICAmJiB2
aXNpdG9yLmlzTWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3Qo
KSkKKyAgICAgICAgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+
d3JhcHBlZE9iamVjdCgpKTsKIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMjIsMTcgKzEyMiwx
NiBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogdm9p
ZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnNldFdyYXBwZWRPYmplY3Qodm9pZCogd3JhcHBlZE9iamVj
dCkKIHsKICAgICBBU1NFUlQoIW1fd3JhcHBlZE9iamVjdCk7Ci0gICAgbV93cmFwcGVkT2JqZWN0
ID0gW3N0YXRpY19jYXN0PGlkPih3cmFwcGVkT2JqZWN0KSByZXRhaW5dOworICAgIG1fd3JhcHBl
ZE9iamVjdCA9IHdyYXBwZWRPYmplY3QgPyBjb25zdF9jYXN0PHZvaWQqPihDRlJldGFpbih3cmFw
cGVkT2JqZWN0KSkgOiBOVUxMOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9p
ZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKIHsKLSAgICBKU0FQSVdyYXBwZXJPYmplY3QqIHRoaXNPYmplY3QgPSBK
U0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihjZWxsKTsKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gSlNDOjpqc0Nhc3Q8SlNBUElXcmFwcGVyT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAotICAgIHZvaWQqIHdyYXBwZWRPYmplY3Qg
PSB0aGlzT2JqZWN0LT53cmFwcGVkT2JqZWN0KCk7Ci0gICAgaWYgKHdyYXBwZWRPYmplY3QpCisg
ICAgaWYgKGF1dG8qIHdyYXBwZWRPYmplY3QgPSB0aGlzT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkp
CiAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZpc2l0b3Iudm0oKSwgdmlzaXRvciwg
d3JhcHBlZE9iamVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0K
aW5kZXggZGJmZmI1OGYwNmFiLi42NjAwMGViMDRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0Lm1tCkBAIC02OCwxMyArNjgsMTMgQEAgLSAodm9pZCllbnN1cmVXcmFwcGVy
TWFwCiB7CiAgICAgaWYgKCF0b0pTKFtzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl0pLT53cmFwcGVy
TWFwKCkpIHsKICAgICAgICAgLy8gVGhlIG1hcCB3aWxsIGJlIHJldGFpbmVkIGJ5IHRoZSBHbG9i
YWxPYmplY3QgaW4gaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIFtbW0pTV3JhcHBlck1hcCBhbGxv
Y10gaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOltzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl1dIHJl
bGVhc2VdOworICAgICAgICAodm9pZClbW0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhHbG9i
YWxDb250ZXh0UmVmOltzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl1dOwogICAgIH0KIH0KIAogLSAo
aW5zdGFuY2V0eXBlKWluaXQKIHsKLSAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWaXJ0dWFsTWFj
aGluZTphZG9wdE5TKFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAg
ICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpbW0pTVmlydHVhbE1hY2hpbmUg
YWxsb2NdIGluaXRdXTsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQpAQCAtMTAwLDggKzEwMCw2IEBA
IC0gKHZvaWQpZGVhbGxvYwogewogICAgIG1fZXhjZXB0aW9uID0gbmlsOwogICAgIEpTR2xvYmFs
Q29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKLSAgICBbX2V4Y2VwdGlvbkhhbmRsZXIgcmVsZWFz
ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAtIChKU1ZhbHVlICopZXZhbHVhdGVTY3Jp
cHQ6KE5TU3RyaW5nICopc2NyaXB0CkBAIC0zODAsOSArMzc4LDcgQEAgLSAoQk9PTClib29sRnJv
bU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb25WYWx1ZQogLSAodm9pZCliZWdp
bkNhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSBjYWxsZWVWYWx1
ZTooSlNWYWx1ZVJlZiljYWxsZWVWYWx1ZSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVl
IGFyZ3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNW
YWx1ZVJlZiAqKWFyZ3VtZW50cwogewogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJy
ZW50KCk7Ci0gICAgW3NlbGYgcmV0YWluXTsKLSAgICBDYWxsYmFja0RhdGEgKnByZXZTdGFjayA9
IChDYWxsYmFja0RhdGEgKil0aHJlYWQubV9hcGlEYXRhOwotICAgICpjYWxsYmFja0RhdGEgPSBD
YWxsYmFja0RhdGEgeyBwcmV2U3RhY2ssIHNlbGYsIHNlbGYuZXhjZXB0aW9uLCBjYWxsZWVWYWx1
ZSwgdGhpc1ZhbHVlLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIG5pbCB9OworICAgICpjYWxs
YmFja0RhdGEgPSBDYWxsYmFja0RhdGEgeyBzdGF0aWNfY2FzdDxDYWxsYmFja0RhdGEqPih0aHJl
YWQubV9hcGlEYXRhKSwgc2VsZiwgc2VsZi5leGNlcHRpb24sIGNhbGxlZVZhbHVlLCB0aGlzVmFs
dWUsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbmlsIH07CiAgICAgdGhyZWFkLm1fYXBpRGF0
YSA9IGNhbGxiYWNrRGF0YTsKICAgICBzZWxmLmV4Y2VwdGlvbiA9IG5pbDsKIH0KQEAgLTM5Miw3
ICszODgsNiBAQCAtICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNh
bGxiYWNrRGF0YQogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CiAgICAg
c2VsZi5leGNlcHRpb24gPSBjYWxsYmFja0RhdGEtPnByZXNlcnZlZEV4Y2VwdGlvbi5nZXQoKTsK
ICAgICB0aHJlYWQubV9hcGlEYXRhID0gY2FsbGJhY2tEYXRhLT5uZXh0OwotICAgIFtzZWxmIHJl
bGVhc2VdOwogfQogCiAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6KGlkKW9iamVj
dApAQCAtNDE1LDEwICs0MTAsMTAgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JKU09iamVjdDoo
SlNWYWx1ZVJlZil2YWx1ZQogKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhKU0dsb2JhbENvbnRl
eHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CiB7CiAgICAgSlNWaXJ0dWFs
TWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGlu
ZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnRvSlMoZ2xvYmFsQ29udGV4dCktPnZtKCkpXTsK
LSAgICBhdXRvIGNvbnRleHQgPSByZXRhaW5QdHIoW3ZpcnR1YWxNYWNoaW5lIGNvbnRleHRGb3JH
bG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdKTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbdmlydHVhbE1hY2hpbmUgY29udGV4dEZvckdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4
dF07CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICBjb250ZXh0ID0gYWRvcHROUyhbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdKTsKLSAg
ICByZXR1cm4gY29udGV4dC5hdXRvcmVsZWFzZSgpOworICAgICAgICBjb250ZXh0ID0gW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0XTsKKyAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYW5hZ2VkVmFsdWUubW0KaW5kZXggMmNkMmQ3MDkwNDU1Li40NmRiYzNjMzM2NmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQpAQCAtNjEsMTQgKzYx
LDE0IEBAIEBpbXBsZW1lbnRhdGlvbiBKU01hbmFnZWRWYWx1ZSB7CiAKICsgKEpTTWFuYWdlZFZh
bHVlICopbWFuYWdlZFZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlICopdmFsdWUKIHsKLSAgICByZXR1
cm4gYWRvcHROUyhbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWVdKS5hdXRvcmVsZWFz
ZSgpOworICAgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWVdOwogfQog
CiArIChKU01hbmFnZWRWYWx1ZSAqKW1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZSAqKXZh
bHVlIGFuZE93bmVyOihpZClvd25lcgogewotICAgIGF1dG8gbWFuYWdlZFZhbHVlID0gYWRvcHRO
UyhbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWVdKTsKLSAgICBbdmFsdWUuY29udGV4
dC52aXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRWYWx1ZS5nZXQoKSB3
aXRoT3duZXI6b3duZXJdOwotICAgIHJldHVybiBtYW5hZ2VkVmFsdWUuYXV0b3JlbGVhc2UoKTsK
KyAgICBKU01hbmFnZWRWYWx1ZSAqbWFuYWdlZFZhbHVlID0gW1tzZWxmIGFsbG9jXSBpbml0V2l0
aFZhbHVlOnZhbHVlXTsKKyAgICBbdmFsdWUuY29udGV4dC52aXJ0dWFsTWFjaGluZSBhZGRNYW5h
Z2VkUmVmZXJlbmNlOm1hbmFnZWRWYWx1ZSB3aXRoT3duZXI6b3duZXJdOworICAgIHJldHVybiBt
YW5hZ2VkVmFsdWU7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMjEsNyArMTIxLDYg
QEAgLSAodm9pZClkZWFsbG9jCiAgICAgfQogCiAgICAgW3NlbGYgZGlzY29ubmVjdFZhbHVlXTsK
LSAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpZGlkQWRkT3duZXI6KGlkKW93bmVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmVtb3RlSW5zcGVjdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZW1vdGVJbnNwZWN0b3IuY3BwCmlu
ZGV4IDAyMjc5YzJlN2EyZC4uYjliMjAxYjc4MGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTUmVtb3RlSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTUmVtb3RlSW5zcGVjdG9yLmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIEpT
UmVtb3RlSW5zcGVjdG9yU2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKFByb2Nlc3NJRCBwaWQs
IGNvbnN0IHVpbnQ4X3QqCiB7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpICYmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1ZGl0RGF0YVJlZiA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGF1ZGl0RGF0YSwgYXVkaXRMZW5n
dGgpKTsKLSAgICBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnNldFBhcmVudFByb2Nlc3NJ
bmZvcm1hdGlvbihwaWQsIGF1ZGl0RGF0YVJlZik7CisgICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5n
bGV0b24oKS5zZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24ocGlkLCBhdWRpdERhdGFSZWYuZ2V0
KCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGlkKTsKICAgICBVTlVTRURfUEFSQU0oYXVk
aXREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
bW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmluZGV4IDAzZjU5NWIz
ZWQ0ZS4uNWRmZGZlZDI4MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0K
QEAgLTExNSwxNCArMTE1LDE0IEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2Ny
aXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuCiAgICAgaWYgKCF2
YWxpZGF0ZUJ5dGVjb2RlQ2FjaGVQYXRoKGNhY2hlUGF0aCwgZXJyb3IpKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbSlNTY3JpcHQgYWxsb2NdIGlu
aXRdKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CiAg
ICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0
eXBlOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVzdWx0LT5tX3NvdXJj
ZVVSTCA9IHNvdXJjZVVSTDsKICAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOwog
ICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKLSAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZToo
SlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxl
UGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihO
U1VSTCAqKWNhY2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0g
ZXJyb3I6KG91dCBOU0Vycm9yICoqKWVycm9yCkBAIC0xNDMsNyArMTQzLDcgQEAgKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTooTlNVUkwKICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShmaWxlRGF0YS5z
cGFuKCkpKQogICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAlQCBhcmUgQVNDSUkuIiwgc3Rh
dGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7CiAKLSAgICBhdXRvIHJl
c3VsdCA9IGFkb3B0TlMoW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0pOworICAgIEpTU2NyaXB0ICpy
ZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKICAgICByZXN1bHQtPm1fdmlydHVhbE1h
Y2hpbmUgPSB2bTsKICAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CiAgICAgcmVzdWx0LT5tX3Nv
dXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhmaWxlRGF0YS5z
cGFuKCkpKTsKQEAgLTE1MSw3ICsxNTEsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBl
OihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VSTAogICAg
IHJlc3VsdC0+bV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CiAgICAgcmVzdWx0LT5tX2NhY2hlUGF0
aCA9IGNhY2hlUGF0aDsKICAgICBbcmVzdWx0IHJlYWRDYWNoZV07Ci0gICAgcmV0dXJuIHJlc3Vs
dC5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC0gKHZvaWQpcmVhZENh
Y2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0KaW5kZXggNDhlMzY0MjM1NjI1Li5h
MzU2OGZkMWFkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0KQEAgLTc2LDEy
ICs3Niw4IEBAIEBpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlIHsKIAogLSAodm9pZClkZWFsbG9jCiB7
Ci0gICAgaWYgKF9jb250ZXh0KSB7CisgICAgaWYgKF9jb250ZXh0KQogICAgICAgICBKU1ZhbHVl
VW5wcm90ZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlKTsKLSAgICAg
ICAgW19jb250ZXh0IHJlbGVhc2VdOwotICAgICAgICBfY29udGV4dCA9IG5pbDsKLSAgICB9Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCkBAIC0x
MjMxLDE2ICsxMjI3LDExIEBAIC0gKEpTVmFsdWUgKilpbml0CiAKIC0gKEpTVmFsdWUgKilpbml0
V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dAogewotICAgIGlmICghdmFsdWUgfHwgIWNvbnRleHQpIHsKLSAgICAgICAgW3NlbGYgcmVsZWFz
ZV07Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCiAgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCisgICAgaWYgKCFzZWxmIHx8ICF2YWx1ZSB8fCAhY29udGV4dCkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF9jb250ZXh0ID0gW2NvbnRleHQgcmV0YWluXTsK
KyAgICBfY29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgIEpTVmFs
dWVQcm90ZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlKTsKICAgICBy
ZXR1cm4gc2VsZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQppbmRleCAxYmMyM2U0NDM4MDUuLmI2YWQ5YjdmYTVhNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMTI1LDcgKzEyNSw2IEBAIC0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRleHRHcm91cFJlZjooSlNDb250ZXh0R3JvdXBSZWYp
Z3JvdXAKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZShtX2dy
b3VwKTsKLSAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9i
amNPYmplY3QoaWQgb2JqZWN0KQpAQCAtMjM4LDEwICsyMzcsMTAgQEAgSlNDb250ZXh0R3JvdXBS
ZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1h
Y2hpbmUpCiAKICsgKEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0
R3JvdXBSZWY6KEpTQ29udGV4dEdyb3VwUmVmKWdyb3VwCiB7Ci0gICAgYXV0byB2aXJ0dWFsTWFj
aGluZSA9IHJldGFpblB0cihbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3Jv
dXBSZWY6Z3JvdXBdKTsKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtK
U1ZNV3JhcHBlckNhY2hlIHdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgICAg
aWYgKCF2aXJ0dWFsTWFjaGluZSkKLSAgICAgICAgdmlydHVhbE1hY2hpbmUgPSBhZG9wdE5TKFtb
SlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdFdpdGhDb250ZXh0R3JvdXBSZWY6Z3JvdXBdKTsK
LSAgICByZXR1cm4gdmlydHVhbE1hY2hpbmUuYXV0b3JlbGVhc2UoKTsKKyAgICAgICAgdmlydHVh
bE1hY2hpbmUgPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRXaXRoQ29udGV4dEdyb3Vw
UmVmOmdyb3VwXTsKKyAgICByZXR1cm4gdmlydHVhbE1hY2hpbmU7CiB9CiAKIC0gKEpTQ29udGV4
dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFs
Q29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQppbmRleCA3
MmNhNTRiMGExYjAuLjc4YjI3NThhZTUxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1dyYXBwZXJNYXAubW0KQEAgLTQyMyw3ICs0MjMsNiBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdEZv
ckNsYXNzOihDbGFzcyljbHMKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpTQ2xhc3NSZWxlYXNl
KG1fY2xhc3NSZWYuZ2V0KCkpOwotICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAogc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyhKU0NvbnRleHQg
KmNvbnRleHQsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgQ2xhc3MgY2xzKQpAQCAtNTE1LDggKzUx
NCw4IEBAIC0gKENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcilhbGxvY2F0ZUNvbnN0cnVjdG9yQW5k
UHJvdG90eXBlSW5Db250ZXh0OihKU0NvbnRleHQKIAogICAgICAgICBQcm90b2NvbCAqZXhwb3J0
UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7CiAgICAgICAgIGZvckVhY2hQcm90b2Nv
bEltcGxlbWVudGluZ1Byb3RvY29sKG1fY2xhc3MsIGV4cG9ydFByb3RvY29sLCBeKFByb3RvY29s
ICpwcm90b2NvbCwgYm9vbCYpewotICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3BlcnRpZXMo
Y29udGV4dCwgbV9jbGFzcywgcHJvdG9jb2wsIHByb3RvdHlwZSk7Ci0gICAgICAgICAgICBjb3B5
TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIG1fY2xhc3MsIHByb3RvY29sLCBOTywgY29uc3RydWN0
b3IpOworICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3BlcnRpZXMoY29udGV4dCwgc2VsZi0+
bV9jbGFzcywgcHJvdG9jb2wsIHByb3RvdHlwZSk7CisgICAgICAgICAgICBjb3B5TWV0aG9kc1Rv
T2JqZWN0KGNvbnRleHQsIHNlbGYtPm1fY2xhc3MsIHByb3RvY29sLCBOTywgY29uc3RydWN0b3Ip
OwogICAgICAgICB9KTsKIAogICAgICAgICAvLyBTZXQgW1Byb3RvdHlwZV0uCkBAIC02MzIsNyAr
NjMxLDcgQEAgLSAoSlNPYmpDQ2xhc3NJbmZvKiljbGFzc0luZm9Gb3JDbGFzczooQ2xhc3MpY2xz
CiAgICAgICAgICAgICByZXR1cm4gbV9jbGFzc01hcC5nZXQoKVsoaWQpY2xzXSA9IFtzZWxmIGNs
YXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MoY2xzKV07CiAgICAgfQogCi0gICAg
cmV0dXJuIG1fY2xhc3NNYXAuZ2V0KClbKGlkKWNsc10gPSBhZG9wdE5TKFtbSlNPYmpDQ2xhc3NJ
bmZvIGFsbG9jXSBpbml0Rm9yQ2xhc3M6Y2xzXSkuZ2V0KCk7CisgICAgcmV0dXJuIG1fY2xhc3NN
YXAuZ2V0KClbKGlkKWNsc10gPSBbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdEZvckNsYXNz
OmNsc107CiB9CiAKIC0gKEpTVmFsdWUgKilqc1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdCBp
bkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKQEAgLTY2MSwxMiArNjYwLDEyIEBAIC0gKEpT
VmFsdWUgKilqc1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQKIC0gKEpTVmFsdWUgKilvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6KEpTVmFs
dWVSZWYpdmFsdWUgaW5Db250ZXh0OmNvbnRleHQKIHsKICAgICBBU1NFUlQodG9KU0dsb2JhbE9i
amVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKS0+d3JhcHBlck1hcCgpID09IHNlbGYp
OwotICAgIGF1dG8gd3JhcHBlciA9IHJldGFpblB0cigoX19icmlkZ2UgSlNWYWx1ZSAqKU5TTWFw
R2V0KG1fY2FjaGVkT2JqQ1dyYXBwZXJzLmdldCgpLCB2YWx1ZSkpOworICAgIEpTVmFsdWUgKndy
YXBwZXIgPSAoX19icmlkZ2UgSlNWYWx1ZSAqKU5TTWFwR2V0KG1fY2FjaGVkT2JqQ1dyYXBwZXJz
LmdldCgpLCB2YWx1ZSk7CiAgICAgaWYgKCF3cmFwcGVyKSB7Ci0gICAgICAgIHdyYXBwZXIgPSBh
ZG9wdE5TKFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29u
dGV4dF0pOwotICAgICAgICBOU01hcEluc2VydChtX2NhY2hlZE9iakNXcmFwcGVycy5nZXQoKSwg
dmFsdWUsIChfX2JyaWRnZSB2b2lkKil3cmFwcGVyLmdldCgpKTsKKyAgICAgICAgd3JhcHBlciA9
IFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIE5TTWFwSW5zZXJ0KG1fY2FjaGVkT2JqQ1dyYXBwZXJzLmdldCgpLCB2YWx1ZSwg
KF9fYnJpZGdlIHZvaWQqKXdyYXBwZXIpOwogICAgIH0KLSAgICByZXR1cm4gd3JhcHBlci5hdXRv
cmVsZWFzZSgpOworICAgIHJldHVybiB3cmFwcGVyOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQppbmRleCBlMWZjNTJh
ODMwMGIuLjMwZjA5NDNjZjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCkBAIC00MjcsNyArNDI3LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVsZWFzZSB0aGUgdGFyZ2V0IHNpbmNlIHdl
IGRpZG4ndCBjYWxsIAogICAgICAgICAvLyAtcmV0YWluQXJndW1lbnRzIG9uIG1faW52b2NhdGlv
biAoYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gc28pLgogICAgICAgICBpZiAobV90eXBlID09IENh
bGxiYWNrQmxvY2sgfHwgbV90eXBlID09IENhbGxiYWNrQ2xhc3NNZXRob2QpCi0gICAgICAgICAg
ICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0TlMoW21faW52b2NhdGlvbi5nZXQoKSB0YXJnZXRdKSk7
CisgICAgICAgICAgICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0Q0YoKF9fYnJpZGdlIENGVHlwZVJl
ZilbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0pKTsKICAgICAgICAgbV9pbnN0YW5jZUNsYXNz
ID0gbmlsOwogICAgIH0KIApAQCAtNTg1LDEyICs1ODUsMTEgQEAgSlNWYWx1ZVJlZiBPYmpDQ2Fs
bGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2IKICAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKICAgICBKU0dsb2Jh
bENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl07CiAK
LSAgICBpZCB0YXJnZXQ7CiAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIENhbGxiYWNrSW5pdE1ldGhvZDogewogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghdGhpc09iamVjdCk7Ci0gICAgICAgIHRhcmdldCA9IFttX2luc3RhbmNlQ2xhc3Mg
YWxsb2NdOworICAgICAgICBpZCB0YXJnZXQgPSBbbV9pbnN0YW5jZUNsYXNzIGFsbG9jXTsKICAg
ICAgICAgaWYgKCF0YXJnZXQgfHwgIVt0YXJnZXQgaXNLaW5kT2ZDbGFzczptX2luc3RhbmNlQ2xh
c3MuZ2V0KCldKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVU
eXBlRXJyb3IodG9KUyhjb250ZXh0UmVmKSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9i
amVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZCJfcykpOwogICAgICAgICAgICAgaWYgKCpleGNlcHRp
b24pCkBAIC01OTgsMTEgKzU5NywxNCBAQCBKU1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9u
SW1wbDo6Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYgogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRSZWYpOwogICAgICAgICB9
CiAgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07CitJR05PUkVfQ0xBTkdf
U1RBVElDX0FOQUxZWkVSX1dBUk5JTkdTX0JFR0lOKCJvc3guY29jb2EuUmV0YWluQ291bnQiKQor
ICAgICAgICBDRlJldGFpbigoX19icmlkZ2UgQ0ZUeXBlUmVmKXRhcmdldCk7IC8vIFNlZSBDRkF1
dG9yZWxlYXNlKCkgYmVsb3cuCitJR05PUkVfQ0xBTkdfU1RBVElDX0FOQUxZWkVSX1dBUk5JTkdT
X0VORAogICAgICAgICBmaXJzdEFyZ3VtZW50ID0gMjsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDogewotICAgICAgICB0YXJnZXQgPSB0cnlV
bndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHRoaXNPYmplY3QpOworICAgICAgICBpZCB0YXJn
ZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHRoaXNPYmplY3QpOwogICAgICAg
ICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFzcy5n
ZXQoKV0pIHsKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVF
cnJvcih0b0pTKGNvbnRleHRSZWYpLCAic2VsZiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0
aXZlLUMgaW5zdGFuY2UgbWV0aG9kIl9zKSk7CiAgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikK
QEAgLTYzNSwxNCArNjM3LDE2IEBAIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
OjpjYWxsKEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iCiAgICAgaWYgKCpl
eGNlcHRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gQmFsYW5jZSBvdXIg
Y2FsbCB0byAtYWxsb2Mgd2l0aCBhIGNhbGwgdG8gLWF1dG9yZWxlYXNlLiBXZSBoYXZlIHRvIGRv
IHRoaXMgYWZ0ZXIgY2FsbGluZyAtaW5pdAorSUdOT1JFX0NMQU5HX1NUQVRJQ19BTkFMWVpFUl9X
QVJOSU5HU19CRUdJTigib3N4LmNvY29hLlJldGFpbkNvdW50IikKKyAgICAvLyBCYWxhbmNlIG91
ciBjYWxsIHRvIENGUmV0YWluIHdpdGggYSBjYWxsIHRvIENGQXV0b3JlbGVhc2UuIFdlIGhhdmUg
dG8gZG8gdGhpcyBhZnRlciBjYWxsaW5nIGluaXQKICAgICAvLyBiZWNhdXNlIGluaXQgZmFtaWx5
IG1ldGhvZHMgYXJlIGFsbG93ZWQgdG8gcmVsZWFzZSB0aGUgYWxsb2NhdGVkIG9iamVjdCBhbmQg
cmV0dXJuIHNvbWV0aGluZyAKICAgICAvLyBlbHNlIGluIGl0cyBwbGFjZS4KICAgICBpZiAobV90
eXBlID09IENhbGxiYWNrSW5pdE1ldGhvZCkgewogICAgICAgICBpZCBvYmpjUmVzdWx0ID0gdHJ5
VW53cmFwT2JqY09iamVjdChjb250ZXh0UmVmLCByZXN1bHQpOwogICAgICAgICBpZiAob2JqY1Jl
c3VsdCkKLSAgICAgICAgICAgIFtvYmpjUmVzdWx0IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAg
IENGQXV0b3JlbGVhc2UoKF9fYnJpZGdlIENGVHlwZVJlZilvYmpjUmVzdWx0KTsKICAgICB9CitJ
R05PUkVfQ0xBTkdfU1RBVElDX0FOQUxZWkVSX1dBUk5JTkdTX0VORAogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcKaW5kZXggMjgwMTU5YzJlNDE3Li5iZDQ4YmUxNzRlZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCkBAIC0y
OCw3ICsyOCw3IEBAIEFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POwogQ0xBTkdfQ1hYX0xB
TkdVQUdFX1NUQU5EQVJEID0gYysrMmI7CiBDTEFOR19DWFhfTElCUkFSWSA9IGxpYmMrKzsKIENM
QU5HX0VOQUJMRV9FWFBMSUNJVF9NT0RVTEVTID0gTk87Ci1DTEFOR19FTkFCTEVfT0JKQ19XRUFL
ID0gWUVTOworQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwogQ0xBTkdfV0FSTl9CTE9DS19D
QVBUVVJFX0FVVE9SRUxFQVNJTkcgPSBZRVM7CiBDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9
IFlFUzsKIENMQU5HX1dBUk5fQ09NTUEgPSBZRVM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCmluZGV4IDY3MWE0
NWQyMmU5MC4uYjlkNDMwMjU2Y2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaApAQCAtMTU4LDcgKzE1OCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BhcmVudFByb2Nlc3NJbmZvcm1hdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyZW50UHJvY2Vzc0lkZW50aWZpZXIgIT0gMDsgfQogICAgIFByb2Nlc3NJ
RCBwYXJlbnRQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UHJvY2Vz
c0lkZW50aWZpZXI7IH0KICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwYXJlbnRQcm9jZXNzQXVk
aXREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRQcm9jZXNzQXVkaXREYXRhOyB9Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24oUHJvY2Vz
c0lELCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBhdWRpdERhdGEpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKFByb2Nlc3NJRCwgQ0ZEYXRhUmVm
IGF1ZGl0RGF0YSk7CiAgICAgc3RkOjpvcHRpb25hbDxhdWRpdF90b2tlbl90PiBwYXJlbnRQcm9j
ZXNzQXVkaXRUb2tlbigpOwogCiAgICAgdm9pZCBzZXRVc2VQZXJUYXJnZXRQcmVzZW50aW5nQXBw
bGljYXRpb25QSURzKGJvb2wgdXNlUGVyVGFyZ2V0UHJlc2VudGluZ0FwcGxpY2F0aW9uUElEcykg
eyBtX3VzZVBlclRhcmdldFByZXNlbnRpbmdBcHBsaWNhdGlvblBJRHMgPSB1c2VQZXJUYXJnZXRQ
cmVzZW50aW5nQXBwbGljYXRpb25QSURzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVDb25uZWN0aW9uVG9UYXJnZXRDb2Nv
YS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2NvY29hL1JlbW90
ZUNvbm5lY3Rpb25Ub1RhcmdldENvY29hLm1tCmluZGV4IDY1MmQwMmZiMGQzZC4uNDczZTliY2Q2
ZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9j
b2NvYS9SZW1vdGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVDb25uZWN0aW9uVG9UYXJnZXRD
b2NvYS5tbQpAQCAtMTI4LDEyICsxMjgsMTIgQEAgc3RkOjpvcHRpb25hbDxUYXJnZXRJRD4gUmVt
b3RlQ29ubmVjdGlvblRvVGFyZ2V0Ojp0YXJnZXRJZGVudGlmaWVyKCkgY29uc3QKIAogTlNTdHJp
bmcgKlJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldDo6Y29ubmVjdGlvbklkZW50aWZpZXIoKSBjb25z
dAogewotICAgIHJldHVybiBhZG9wdE5TKFttX2Nvbm5lY3Rpb25JZGVudGlmaWVyIGNvcHldKS5h
dXRvcmVsZWFzZSgpOworICAgIHJldHVybiBbbV9jb25uZWN0aW9uSWRlbnRpZmllciBjb3B5XTsK
IH0KIAogTlNTdHJpbmcgKlJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldDo6ZGVzdGluYXRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBhZG9wdE5TKFttX2Rlc3RpbmF0aW9uIGNvcHldKS5hdXRvcmVs
ZWFzZSgpOworICAgIHJldHVybiBbbV9kZXN0aW5hdGlvbiBjb3B5XTsKIH0KIAogdm9pZCBSZW1v
dGVDb25uZWN0aW9uVG9UYXJnZXQ6OmRpc3BhdGNoQXN5bmNPblRhcmdldChGdW5jdGlvbjx2b2lk
ICgpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JDb2NvYS5tbQpp
bmRleCA2NDVlMjVjMWFmZjAuLmM0NjQyYzhkZmVjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvY29jb2EvUmVtb3Rl
SW5zcGVjdG9yQ29jb2EubW0KQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
cjo6Y29ubmVjdFRvV2ViSW5zcGVjdG9yKCkKIAogI3ByYWdtYSBtYXJrIC0gUHJveHkgQXBwbGlj
YXRpb24gSW5mb3JtYXRpb24KIAotdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldFBhcmVudFByb2Nl
c3NJbmZvcm1hdGlvbihwaWRfdCBwaWQsIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1ZGl0RGF0YSkK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24ocGlkX3Qg
cGlkLCBDRkRhdGFSZWYgYXVkaXREYXRhKQogewogICAgIExvY2tlciBsb2NrZXIgeyBtX211dGV4
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9u
Lm1tCmluZGV4IGFlZmY2OGI0Nzk4My4uZjcwNTA0MmYxMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9jb2NvYS9SZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L2NvY29hL1JlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0KQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5o
PgogI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1R5cGVDYXN0c0NvY29hLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL0NGWFBDQnJpZGdlU1BJ
Lmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KQEAgLTE3NSwxOSArMTc2LDIwIEBAIHZvaWQgUmVtb3RlSW5z
cGVjdG9yWFBDQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2UoTlNTdHJpbmcgKm1lc3NhZ2VOYW1lLCBO
U0RpY3Rpb25hCiAgICAgaWYgKG1fY2xvc2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGRpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0p
OworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwogICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDptZXNzYWdlTmFt
ZSBmb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbk1lc3NhZ2VOYW1lS2V5XTsKICAg
ICBpZiAodXNlckluZm8pCiAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp1c2VySW5mbyBm
b3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvblVzZXJJbmZvS2V5XTsKIAotICAgIGF1
dG8geHBjRGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoX0NGWFBDQ3JlYXRlWFBDTWVzc2FnZVdp
dGhDRk9iamVjdCgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKWRpY3Rpb25hcnkuZ2V0KCkpKTsK
KyAgICBhdXRvIHhwY0RpY3Rpb25hcnkgPSBhZG9wdE9TT2JqZWN0KF9DRlhQQ0NyZWF0ZVhQQ01l
c3NhZ2VXaXRoQ0ZPYmplY3QoYnJpZGdlX2Nhc3QoZGljdGlvbmFyeSkpKTsKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHhwY0RpY3Rpb25hcnkgJiYgeHBjX2dldF90eXBlKHhwY0RpY3Rpb25hcnku
Z2V0KCkpID09IFhQQ19UWVBFX0RJQ1RJT05BUlksICJVbmFibGUgdG8gc2VyaWFsaXplIHhwYyBt
ZXNzYWdlIik7CiAgICAgaWYgKCF4cGNEaWN0aW9uYXJ5KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIG1zZyA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIs
IG51bGxwdHIsIDApKTsKLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfdmFsdWUobXNnLmdldCgpLCBS
ZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uU2VyaWFsaXplZE1lc3NhZ2VLZXksIHhwY0RpY3Rp
b25hcnkuZ2V0KCkpOwotICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShtX2Nvbm5lY3Rp
b24uZ2V0KCksIG1zZy5nZXQoKSk7CisgICAgeHBjX29iamVjdF90IG1zZyA9IHhwY19kaWN0aW9u
YXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKTsKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRf
dmFsdWUobXNnLCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uU2VyaWFsaXplZE1lc3NhZ2VL
ZXksIHhwY0RpY3Rpb25hcnkuZ2V0KCkpOworCisgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNz
YWdlKG1fY29ubmVjdGlvbi5nZXQoKSwgbXNnKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMmI0ZGMxYThl
YzU4Li42MmQwYTFmZmRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKQEAgLTYzNSw3ICs2MzUsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzLAogI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKSAmJiBQTEFURk9STShDT0NPQSkgJiYgIUVOQUJMRShSRU1PVkVf
WFBDX0FORF9NQUNIX1NBTkRCT1hfRVhURU5TSU9OU19JTl9XRUJDT05URU5UKQogICAgIGlmIChz
dGQ6Om9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4gPSBwcm90ZWN0ZWRQYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKCkpIHsKICAgICAgICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gYXVkaXREYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgKGNv
bnN0IFVJbnQ4KikmKmF1ZGl0VG9rZW4sIHNpemVvZigqYXVkaXRUb2tlbikpKTsKLSAgICAgICAg
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnNldFBhcmVudFByb2Nlc3NJ
bmZvcm1hdGlvbihsZWdhY3lQcmVzZW50aW5nQXBwbGljYXRpb25QSUQoKSwgYXVkaXREYXRhKTsK
KyAgICAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnNldFBhcmVu
dFByb2Nlc3NJbmZvcm1hdGlvbihsZWdhY3lQcmVzZW50aW5nQXBwbGljYXRpb25QSUQoKSwgYXVk
aXREYXRhLmdldCgpKTsKICAgICB9CiAgICAgLy8gV2UgbmVlZCB0byBjb25uZWN0IHRvIHdlYmlu
c3BlY3RvcmQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGxvYWQgZm9yIHRoZSBYUEMgY29ubmVjdGlv
biB0byBiZSBzdWNjZXNzZnVsbHkgb3BlbmVkLgogICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBi
bG9jayBsYXVuY2hkIGJlZm9yZSB0aGUgZmlyc3QgcGFnZSBsb2FkLCBhbmQgbGF1bmNoZCBpcyBy
ZXF1aXJlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggOTZkNDFmMmQwOTdiLi4yNmFhODAyYmFhODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTI3MTYs
NyArMjcxNiw3IEBAIC0gKHZvaWQpc2V0U2hvd2luZ0luc3BlY3RvckluZGljYXRpb246KEJPT0wp
c2hvd2luZwogLSAodm9pZClfc2V0SG9zdEFwcGxpY2F0aW9uUHJvY2Vzc0lkZW50aWZpZXI6KHBp
ZF90KXBpZCBhdWRpdFRva2VuOihhdWRpdF90b2tlbl90KWF1ZGl0VG9rZW4KIHsKICAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBhdWRpdERhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRy
LCAoY29uc3QgVUludDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKLSAgICBJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0UGFyZW50UHJvY2Vzc0lu
Zm9ybWF0aW9uKHBpZCwgYXVkaXREYXRhKTsKKyAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
cjo6c2luZ2xldG9uKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKHBpZCwgYXVkaXREYXRh
LmdldCgpKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogI2VuZGlmIC8vIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK
</data>
<flag name="review"
          id="498520"
          type_id="1"
          status="?"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="498523"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>