<?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>18826</bug_id>
          
          <creation_ts>2008-05-01 02:08:17 -0700</creation_ts>
          <short_desc>Make JavaScript heap per-thread</short_desc>
          <delta_ts>2008-05-02 03:19:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>79337</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-01 02:08:17 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79341</commentid>
    <comment_count>1</comment_count>
      <attachid>20911</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-01 04:17:40 -0700</bug_when>
    <thetext>Created attachment 20911
proposed patch

A couple of known loose ends:
- Collector renaming is not finished, will rename the file and remaining structures in a follow-up patch.
- When a thread dies, uncollected objects will leak. Still need to think about how to fix this right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79345</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:12:26 -0700</bug_when>
    <thetext>     JSLock lock;
-    if (!Collector::isBusy())
-        Collector::collect();
+
+    ExecState* exec = toJS(ctx);
+    if (!exec-&gt;heap()-&gt;isBusy())
+        exec-&gt;heap()-&gt;collect();

We need to support a NULL ctx passed to JSGarbageCollect, for the case when you want to garbage collect after releasing the last reference to a JSGlobalContextRef. So, I think JSGarbageCollect should check for a NULL ctx, and do the slower thing. You should probably update the header documentation to that effect, too.

Still reading the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79346</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:24:48 -0700</bug_when>
    <thetext>Do you think you can land the &quot;Collector&quot; =&gt; &quot;Heap&quot; renaming first, separately? That should make things easier if we ever have to return to this patch and understand the behavior change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79347</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:30:53 -0700</bug_when>
    <thetext>+    // FIXME: should assert that the result equals threadHeap(), but currently, this fails as database code uses gcUnprotect from a different thread.
+    // That&apos;s a race condition and should be fixed.

Yikes! Double yikes!

I&apos;d really like to have a working version of this ASSERT. Is it possible to land a fix for the database bug before landing this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79348</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:32:15 -0700</bug_when>
    <thetext>-  ProtectCountSet&amp; protectedValues = KJS::protectedValues();
-  ProtectCountSet::iterator end = protectedValues.end();
-  for (ProtectCountSet::iterator it = protectedValues.begin(); it != end; ++it) {
+  HashCountedSet&lt;JSCell*&gt;::iterator end = protectedValues.end();
+  for (HashCountedSet&lt;JSCell*&gt;::iterator it = protectedValues.begin(); it != end; ++it) {

Is it really a win to remove the use of the ProtectCountSet typedef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79349</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:32:53 -0700</bug_when>
    <thetext>-void Collector::markMainThreadOnlyObjects()
-{
-#if USE(MULTIPLE_THREADS)
-    ASSERT(!onMainThread());
-#endif
-
-    // Optimization for clients that never register &quot;main thread only&quot; objects.
-    if (!mainThreadOnlyObjectCount)
-        return;
-
-    // FIXME: We can optimize this marking algorithm by keeping an exact set of 
-    // &quot;main thread only&quot; objects when the &quot;main thread only&quot; object count is 
-    // small. We don&apos;t want to keep an exact set all the time, because WebCore 
-    // tends to create lots of &quot;main thread only&quot; objects, and all that set 
-    // thrashing can be expensive.

Man, you&apos;re really hurting my job security here.... ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79350</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:34:53 -0700</bug_when>
    <thetext>-                        ASSERT(currentThreadIsMainThread || !curBlock-&gt;collectOnMainThreadOnly.get(i));

Would it be worthwhile to ASSERT inside Heap::allocate and Heap::collect that the heap doing the work was the current thread&apos;s heap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79351</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:42:04 -0700</bug_when>
    <thetext>Suppose I make object o1 on thread 1, and object o2 on thread 2, and then I set o1 to be a property of o2. When thread 2 collects, it will mark o1 but, because o1 is not in thread 2&apos;s heap, thread 2 will not unmark o1 (or its references) at the end of GC.

Is that OK? I believe it&apos;s not, since the next collect on thread 1 will fail to trace o1&apos;s references, since o1 will seem already marked.

So, I believe it is officially an error to set properties across threads. Would it be worthwhile to add thread ASSERTS to JSObject::get and JSObject::put?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79352</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:46:02 -0700</bug_when>
    <thetext>-    class SavedProperty : Noncopyable {

Music to my eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79353</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:50:04 -0700</bug_when>
    <thetext>Another thing that would help future readers of this patch: You could land the change to pass ExecState* in more places first, without using the ExecState for anything. You could even land operator new(ExecState*), and just have it ignore its ExecState* at first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79354</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 06:57:34 -0700</bug_when>
    <thetext>+        Removed GCController::garbageCollectOnAlternateThreadForDebugging(), because heaps are now
+        per-thread, and only the owner thread can access a heap.

I don&apos;t agree with this change. garbageCollectOnAlternateThreadForDebugging is a mechanism we use to *verify* that heaps are (successfully) per-thread, and that GC only touches per-thread data. I think we want garbageCollectOnAlternateThreadForDebugging to stay in, and to collect by calling Heap::threadHeap()-&gt;collect(). It&apos;s a lot less interesting than it used to be, but it&apos;s still interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79355</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-05-01 07:05:36 -0700</bug_when>
    <thetext>So, in summary:

Refactorings that would be very helpful to land before the behavior change: (1) Rename &quot;Collector&quot; to &quot;Heap&quot;; (2) Pass ExecState* everyhwere; (3) Fix the Database gcProtect bug. I&apos;ll leave these up to your judgement.

Things you must address before landing: (1) Handle NULL ctx passed to JSGarbageCollect; (2) Please leave in garbageCollectOnAlternateThreadForDebugging. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79418</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-02 03:19:53 -0700</bug_when>
    <thetext>Committed revision 32807.

(In reply to comment #12)
&gt; Refactorings that would be very helpful to land before the behavior change: (1)
&gt; Rename &quot;Collector&quot; to &quot;Heap&quot;; (2) Pass ExecState* everyhwere; 

I&apos;m not sure that (1) adds a lot of noise - even if the renaming were done first, all calls to static Collector methods would still need to be changed to Heap::threadHeap() etc.

I agree that factoring out (2) would be useful, since it&apos;s a dangerous change (changing &quot;new&quot; to &quot;new (exec)&quot; for a non-JS class is easy to overlook, but very dangerous). But it&apos;s also hard to decouple from other changes, and error-prone, so I didn&apos;t do that.

&gt; (3) Fix the Database gcProtect bug.

This one might involve quite a bit of Database refactoring.

&gt; Things you must address before landing: (1) Handle NULL ctx passed to
&gt; JSGarbageCollect; (2) Please leave in
&gt; garbageCollectOnAlternateThreadForDebugging. 

Done. Also, added assertions suggested in comment 7 and comment 8.

&gt; Is it really a win to remove the use of the ProtectCountSet typedef?

That&apos;s debatable, but to me, it&apos;s easier to read code when the actual type is known - especially since in this case, it&apos;s not all that much longer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20911</attachid>
            <date>2008-05-01 04:17:40 -0700</date>
            <delta_ts>2008-05-01 07:05:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>Allocation.txt</filename>
            <type>text/plain</type>
            <size>376966</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzY0IEBACisyMDA4LTA1LTAxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg4MjYKKyAgICAgICAgTWFrZSBKYXZhU2NyaXB0IGhlYXAgcGVyLXRocmVhZAorCisg
ICAgICAgICogd3RmL1RocmVhZFNwZWNpZmljLmg6IE1ha2Ugc3VyZSB0byBpbml0aWFsaXplIFBP
RCB0aHJlYWQtc3BlY2lmaWMgdmFyYWlibGVzLCB0b28KKyAgICAgICAgKHJlcGxhY2VkICJuZXcg
VCIgd2l0aCAibmV3IFQoKSIpLgorCisgICAgICAgICoga2pzL2NvbGxlY3Rvci5oOiBSZW5hbWVk
IENvbGxlY3RvciB0byBIZWFwLCBtYWRlIHRoZSBoZWFwIHBlci10aHJlYWQuIFJlbW92ZWQgc3Vw
cG9ydCBmb3IKKyAgICAgICAgbXVsdGl0aHJlYWRlZCBhY2Nlc3MgdG8gYSBoZWFwLgorICAgICAg
ICAoS0pTOjpDb2xsZWN0b3JCbG9jayk6IFJlbW92ZWQgY29sbGVjdE9uTWFpblRocmVhZE9ubHkg
Yml0bWFwLCBhZGRlZCBhIHJlZmVyZW5jZSB0byBvd25lciBoZWFwLgorICAgICAgICAoS0pTOjpT
bWFsbENlbGxDb2xsZWN0b3JCbG9jayk6IERpdHRvLgorICAgICAgICAoS0pTOjpIZWFwOjptYXJr
TGlzdFNldCk6IE1vdmVkIGZyb20gYSBzdGF0aWMgdmFyaWFibGUgaW4gTGlzdC5jcHAgdG8gYSBw
ZXItdGhyZWFkIG9uZSBoZXJlLgorICAgICAgICAoS0pTOjpIZWFwOjpoZWFwKTogQWRkZWQgYSBt
ZXRob2QgdG8gZmluZCB3aGljaCBoZWFwIGEgSlNWYWx1ZSBpcyBhbGxvY2F0ZWQgaW4uCisKKyAg
ICAgICAgKiBranMvY29sbGVjdG9yLmNwcDogQ2hhbmdlZCAiY29uc3Qgc2l6ZV90IiBjb25zdGFu
dHMgdG8gI2RlZmluZXMsIHRvIGF2b2lkIGEgUElDIGJyYW5jaAorICAgICAgICAoZ2NjIHdhcyB1
c2luZyBvbmUgdG8gYWNjZXNzIGEgY29uc3RhbnQgdXNlZCBpbiBzdGQ6Om1heCgpLCBiZWNhdXNl
IGl0IHRha2VzIGEgcmVmZXJlbmNlLAorICAgICAgICBldmVuIHRob3VnaCBzdGQ6Om1heCgpIGl0
c2VsZiB3YXMgaW5saW5lZCkuCisgICAgICAgIChLSlM6OkhlYXA6OnRocmVhZEhlYXApOiBKUyBo
ZWFwIGlzIG5vdyBwZXItdGhyZWFkLgorICAgICAgICAoS0pTOjpIZWFwOjpIZWFwKTogWmVyby1p
bml0aWFsaXplIHRoZSBoZWFwLgorICAgICAgICAoS0pTOjphbGxvY2F0ZUJsb2NrKTogQWRkZWQg
TkVWRVJfSU5MSU5FLCBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gdXNlcyBhIFBJQyBicmFuY2gsIHNv
CisgICAgICAgIGlubGluaW5nIGl0IGluIEhlYXA6OmhlYXBBbGxvY2F0ZSgpIGlzIGJhZCBmb3Ig
cGVyZm9ybWFuY2UsIG5vdyB0aGF0IHRoZSBsYXR0ZXIgZG9lc24ndAorICAgICAgICB1c2UgYW55
IGdsb2JhbCBkYXRhLgorICAgICAgICAoS0pTOjpIZWFwOjpoZWFwQWxsb2NhdGUpOiBJbml0aWFs
aXplIEJsb2NrOjpoZWFwLgorICAgICAgICAoS0pTOjpIZWFwOjptYXJrQ3VycmVudFRocmVhZENv
bnNlcnZhdGl2ZWx5KTogTW92ZWQgaW50byBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHko
KSwKKyAgICAgICAgYXMgR0Mgb25seSB3b3JrcyB3aXRoIGEgY3VycmVudCB0aHJlYWQncyBoZWFw
IG5vdy4KKyAgICAgICAgKEtKUzo6SGVhcDo6c3dlZXApOiBSZW1vdmVkIGNvbGxlY3RPbk1haW5U
aHJlYWRPbmx5IGNoZWNrcy4KKyAgICAgICAgKEtKUzo6SGVhcDo6Y29sbGVjdCk6IERpdHRvLgor
CisgICAgICAgICoga2pzL0pTTG9jay5jcHA6CisgICAgICAgICoga2pzL0pTTG9jay5oOgorICAg
ICAgICAoS0pTOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAgIFJlbW92ZWQgcmVnaXN0ZXJUaHJl
YWQoKSwgYXMgdGhlIGhlYXAgbm8gbG9uZ2VyIGNhcmVzLgorCisgICAgICAgICoga2pzL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwOiAoS0pTOjppbml0aWFsaXplVGhyZWFkaW5nKTogSW5pdGlhbGl6
ZSBuZXcgcGVyLXRocmVhZAorICAgICAgICB2YXJpYWJsZXMgaW4gSGVhcCBhbmQgSlNHbG9iYWxP
YmplY3QuCisKKyAgICAgICAgKiBranMvRXhlY1N0YXRlLmg6IChLSlM6OkV4ZWNTdGF0ZTo6aGVh
cCk6IEFkZGVkIGEgaGVhcCBwb2ludGVyIGZvciBmYXN0ZXIgYWNjZXNzIHRvCisgICAgICAgIHBl
ci10aHJlYWQgaGVhcCwgYW5kIGFuIGFjY2Vzc29yIGZvciBpdC4KKworICAgICAgICAqIGtqcy9K
U0dsb2JhbE9iamVjdC5oOiBNYWRlIEpTR2xvYmFsT2JqZWN0IGxpbmtlZCBsaXN0IHBlci10aHJl
YWQuCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNH
bG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCk6IEZpeGVkIGEgYnVnIGluIGxpbmtlZCBsaXN0
IGhhbmRsaW5nLiBJdCBvbmx5IHdvcmtlZAorICAgICAgICByaWdodCBpZiB0aGUgcmVtb3ZlZCBv
YmplY3Qgd2FzIHRoZSBoZWFkIG9uZSEKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6Omhl
YWQpOiBSZXR1cm4gYSBwZXItdGhyZWFkIGxpc3QgaGVhZC4KKyAgICAgICAgKEtKUzo6SlNHbG9i
YWxPYmplY3Q6OmluaXQpOiBTdG9yZSBhIHJlZmVyZW5jZSB0byBwZXItdGhyZWFkIGhlYXAuCisg
ICAgICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6IFBhc3MgRXhlY1N0YXRlIHRvIGZ1
bmN0aW9ucyB0aGF0IG5lZWQgaXQuCisgICAgICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0Ojp0ZWFy
T2ZmQWN0aXZhdGlvbik6IERpdHRvLgorICAgICAgICAoS0pTOjpKU0dsb2JhbE9iamVjdDo6b3Bl
cmF0b3IgbmV3KTogSlNHbG9iYWxPYmplY3QgYWxsb2NhdGlvbiBjYW5ub3QgdXNlIGFuIEV4ZWNT
dGF0ZSwKKyAgICAgICAgc28gaXQgbmVlZHMgYSBjdXN0b20gb3BlcmF0b3IgbmV3IHRoYXQgZGly
ZWN0bHkgYWNjZXNzZXMgcGVyLXRocmVhZCBoZWFwLgorCisgICAgICAgICoga2pzL2xpc3QuaDoK
KyAgICAgICAgKEtKUzo6TGlzdDo6TGlzdCk6IFJlcGxhY2VkIG1faXNJbk1hcmtTZXQgYm9vbGVh
biB3aXRoIGFuIGFjdHVhbCBwb2ludGVyIHRvIHRoZSBzZXQsIHNpbmNlIGl0CisgICAgICAgIGlz
IG5vIGxvbmdlciBhIHNpbmdsZSBzdGF0aWMgb2JqZWN0LgorICAgICAgICAoS0pTOjpMaXN0Ojp+
TGlzdCk6IERpdHRvLgorICAgICAgICAqIGtqcy9saXN0LmNwcDoKKyAgICAgICAgKEtKUzo6TGlz
dDo6bWFya1NldCk6IFJlbW92ZWQsIHRoaXMgaXMgbm93IHN0b3JlZCBpbiBIZWFwLgorICAgICAg
ICAoS0pTOjpMaXN0OjptYXJrUHJvdGVjdGVkTGlzdHMpOiBUYWtlIGEgcmVmZXJlbmNlIHRvIHRo
ZSBsaXN0LgorICAgICAgICAoS0pTOjpMaXN0OjpleHBhbmRBbmRBcHBlbmQpOiBBc2sgdGhlIGN1
cnJlbnQgdGhyZWFkIGhlYXAgZm9yIGEgbWFyayBzZXQgcmVmZXJlbmNlLgorCisgICAgICAgICog
a2pzL3Byb3RlY3QuaDoKKyAgICAgICAgKEtKUzo6Z2NQcm90ZWN0KToKKyAgICAgICAgKEtKUzo6
Z2NVbnByb3RlY3QpOgorICAgICAgICBVc2UgdGhlIG5ld2x5IGFkZGVkIEhlYXA6OmhlYXAoKSBt
ZXRob2QgdG8gZmluZCBvdXQgd2hpY2ggaGVhcCB0aGUgdmFsdWUgdG8gYmUgKHVuKXByb3RlY3Rl
ZAorICAgICAgICBiZWxvbmdzIHRvLgorCisgICAgICAgICoga2pzL3Byb3BlcnR5X21hcC5oOiBS
ZW1vdmVkIHVudXNlZCBTYXZlZFByb3BlcnR5IGNsYXNzLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUuZXhwOgorICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNHYXJiYWdl
Q29sbGVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAg
ICAgICAgKEtKUzo6OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogQVBJL0pTQ2xh
c3NSZWYuY3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKToKKyAgICAgICAg
KiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAg
KEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKToKKyAgICAgICAgKEpTT2JqZWN0TWFr
ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBBUEkvSlNWYWx1ZVJlZi5jcHA6CisgICAgICAgIChKU1ZhbHVlTWFrZU51bWJlcik6CisgICAg
ICAgIChKU1ZhbHVlTWFrZVN0cmluZyk6CisgICAgICAgICoga2pzL2FycmF5X2luc3RhbmNlLmNw
cDoKKyAgICAgICAgKEtKUzo6QXJyYXlJbnN0YW5jZTo6QXJyYXlJbnN0YW5jZSk6CisgICAgICAg
IChLSlM6OkFycmF5SW5zdGFuY2U6Omxlbmd0aEdldHRlcik6CisgICAgICAgICoga2pzL2FycmF5
X29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAg
ICAgICAoS0pTOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEtKUzo6
YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNDb25jYXQp
OgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY1BvcCk6CisgICAgICAgIChLSlM6OmFycmF5
UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAg
ICAgICAoS0pTOjphcnJheVByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEtKUzo6YXJyYXlQcm90
b0Z1bmNTcGxpY2UpOgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAg
ICAgICAoS0pTOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChLSlM6OmFycmF5UHJv
dG9GdW5jTWFwKToKKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAg
IChLSlM6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9G
dW5jU29tZSk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAg
IChLSlM6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoS0pTOjpBcnJheU9i
amVjdEltcDo6QXJyYXlPYmplY3RJbXApOgorICAgICAgICAoS0pTOjpBcnJheU9iamVjdEltcDo6
Y29uc3RydWN0KToKKyAgICAgICAgKiBranMvYm9vbF9vYmplY3QuY3BwOgorICAgICAgICAoS0pT
OjpCb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKToKKyAgICAgICAgKEtKUzo6Ym9v
bGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6Qm9vbGVhbk9iamVjdEltcDo6
Qm9vbGVhbk9iamVjdEltcCk6CisgICAgICAgIChLSlM6OkJvb2xlYW5PYmplY3RJbXA6OmNvbnN0
cnVjdCk6CisgICAgICAgICoga2pzL2RhdGVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6Zm9y
bWF0TG9jYWxlRGF0ZSk6CisgICAgICAgIChLSlM6OkRhdGVQcm90b3R5cGU6OkRhdGVQcm90b3R5
cGUpOgorICAgICAgICAoS0pTOjpEYXRlT2JqZWN0SW1wOjpEYXRlT2JqZWN0SW1wKToKKyAgICAg
ICAgKEtKUzo6RGF0ZU9iamVjdEltcDo6Y29uc3RydWN0KToKKyAgICAgICAgKEtKUzo6RGF0ZU9i
amVjdEltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpEYXRlT2JqZWN0RnVuY0lt
cDo6RGF0ZU9iamVjdEZ1bmNJbXApOgorICAgICAgICAoS0pTOjpEYXRlT2JqZWN0RnVuY0ltcDo6
Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAgICAgICAoS0pTOjpk
YXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1Rv
VGltZVN0cmluZyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAgICAg
ICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEtKUzo6
ZGF0ZVByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0VGlt
ZSk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6CisgICAgICAgIChL
SlM6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChLSlM6OmRhdGVQcm90
b0Z1bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6
CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChLSlM6
OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY0dldFVU
Q0RhdGUpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAgKEtK
Uzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNH
ZXRIb3Vycyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6CisgICAg
ICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEtKUzo6ZGF0ZVBy
b3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0U2Vj
b25kcyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAgICAg
ICAgKEtKUzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChLSlM6OmRh
dGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9G
dW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jU2V0VGlt
ZSk6CisgICAgICAgIChLSlM6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEtK
Uzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5j
U2V0WWVhcik6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAg
KiBranMvZXJyb3Jfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6RXJyb3JQcm90b3R5cGU6OkVy
cm9yUHJvdG90eXBlKToKKyAgICAgICAgKEtKUzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgIChLSlM6OkVycm9yT2JqZWN0SW1wOjpFcnJvck9iamVjdEltcCk6CisgICAgICAgIChL
SlM6OkVycm9yT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAgICAoS0pTOjpOYXRpdmVFcnJv
clByb3RvdHlwZTo6TmF0aXZlRXJyb3JQcm90b3R5cGUpOgorICAgICAgICAoS0pTOjpOYXRpdmVF
cnJvckltcDo6TmF0aXZlRXJyb3JJbXApOgorICAgICAgICAoS0pTOjpOYXRpdmVFcnJvckltcDo6
Y29uc3RydWN0KToKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpG
dW5jdGlvbkltcDo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6OmNv
bnN0cnVjdCk6CisgICAgICAgIChLSlM6OkFyZ3VtZW50czo6QXJndW1lbnRzKToKKyAgICAgICAg
KEtKUzo6QWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KToKKyAgICAgICAgKEtK
Uzo6ZW5jb2RlKToKKyAgICAgICAgKEtKUzo6ZGVjb2RlKToKKyAgICAgICAgKEtKUzo6Z2xvYmFs
RnVuY1BhcnNlSW50KToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1BhcnNlRmxvYXQpOgorICAg
ICAgICAoS0pTOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1Vu
ZXNjYXBlKToKKyAgICAgICAgKEtKUzo6UHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0
aW9uKToKKyAgICAgICAgKEtKUzo6UHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb246OlByb3RvdHlw
ZVJlZmxleGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBranMvZnVuY3Rpb25fb2JqZWN0LmNwcDoK
KyAgICAgICAgKEtKUzo6RnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKToKKyAg
ICAgICAgKEtKUzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChLSlM6OkZ1
bmN0aW9uT2JqZWN0SW1wOjpGdW5jdGlvbk9iamVjdEltcCk6CisgICAgICAgIChLSlM6OkZ1bmN0
aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6Cisg
ICAgICAgIChLSlM6OlN0cmluZ0ltcDo6dG9PYmplY3QpOgorICAgICAgICAqIGtqcy9pbnRlcm5h
bC5oOgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6OlN0cmluZ0ltcCk6CisgICAgICAgIChLSlM6
Ok51bWJlckltcDo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKiBranMvbG9va3VwLmg6CisgICAg
ICAgIChLSlM6OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKEtKUzo6Y2FjaGVHbG9i
YWxPYmplY3QpOgorICAgICAgICAqIGtqcy9tYXRoX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6
Ok1hdGhPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoS0pTOjptYXRoUHJv
dG9GdW5jQWJzKToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY0FDb3MpOgorICAgICAgICAo
S0pTOjptYXRoUHJvdG9GdW5jQVNpbik6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNBVGFu
KToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY0FUYW4yKToKKyAgICAgICAgKEtKUzo6bWF0
aFByb3RvRnVuY0NlaWwpOgorICAgICAgICAoS0pTOjptYXRoUHJvdG9GdW5jQ29zKToKKyAgICAg
ICAgKEtKUzo6bWF0aFByb3RvRnVuY0V4cCk6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNG
bG9vcik6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNMb2cpOgorICAgICAgICAoS0pTOjpt
YXRoUHJvdG9GdW5jTWF4KToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY01pbik6CisgICAg
ICAgIChLSlM6Om1hdGhQcm90b0Z1bmNQb3cpOgorICAgICAgICAoS0pTOjptYXRoUHJvdG9GdW5j
UmFuZG9tKToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY1JvdW5kKToKKyAgICAgICAgKEtK
Uzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNTcXJ0KToK
KyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY1Rhbik6CisgICAgICAgICoga2pzL25vZGVzLmNw
cDoKKyAgICAgICAgKEtKUzo6Tm9kZTo6aGFuZGxlRXhjZXB0aW9uKToKKyAgICAgICAgKEtKUzo6
TnVtYmVyTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpTdHJpbmdOb2RlOjpldmFsdWF0
ZSk6CisgICAgICAgIChLSlM6OkFycmF5Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQ
b3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UG9zdEluY0xvY2Fs
VmFyTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQb3N0RGVjUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUpOgor
ICAgICAgICAoS0pTOjpQb3N0RGVjTG9jYWxWYXJOb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KToKKyAgICAgICAgKEtKUzo6UG9zdEluY0JyYWNrZXROb2RlOjpldmFsdWF0ZSk6CisgICAgICAg
IChLSlM6OlBvc3REZWNCcmFja2V0Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQb3N0
SW5jRG90Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQb3N0RGVjRG90Tm9kZTo6ZXZh
bHVhdGUpOgorICAgICAgICAoS0pTOjp0eXBlU3RyaW5nRm9yVmFsdWUpOgorICAgICAgICAoS0pT
OjpMb2NhbFZhclR5cGVPZk5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6VHlwZU9mUmVz
b2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6VHlwZU9mVmFsdWVOb2RlOjpldmFs
dWF0ZSk6CisgICAgICAgIChLSlM6OlByZUluY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUpOgorICAg
ICAgICAoS0pTOjpQcmVJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQ
cmVEZWNMb2NhbFZhck5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UHJlRGVjUmVzb2x2
ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UHJlSW5jQ29uc3ROb2RlOjpldmFsdWF0
ZSk6CisgICAgICAgIChLSlM6OlByZURlY0NvbnN0Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAo
S0pTOjpQb3N0SW5jQ29uc3ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlBvc3REZWND
b25zdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UHJlSW5jQnJhY2tldE5vZGU6OmV2
YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UHJlRGVjQnJhY2tldE5vZGU6OmV2YWx1YXRlKToKKyAg
ICAgICAgKEtKUzo6UHJlSW5jRG90Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpQcmVE
ZWNEb3ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6Ok5lZ2F0ZU5vZGU6OmV2YWx1YXRl
KToKKyAgICAgICAgKEtKUzo6Qml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtK
Uzo6TXVsdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6RGl2Tm9kZTo6ZXZhbHVhdGUp
OgorICAgICAgICAoS0pTOjpNb2ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OmFkZFNs
b3dDYXNlKToKKyAgICAgICAgKEtKUzo6YWRkKToKKyAgICAgICAgKEtKUzo6QWRkTnVtYmVyc05v
ZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6QWRkU3RyaW5nc05vZGU6OmV2YWx1YXRlKToK
KyAgICAgICAgKEtKUzo6QWRkU3RyaW5nTGVmdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtK
Uzo6QWRkU3RyaW5nUmlnaHROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlN1Yk5vZGU6
OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6TGVmdFNoaWZ0Tm9kZTo6ZXZhbHVhdGUpOgorICAg
ICAgICAoS0pTOjpSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpVbnNp
Z25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OkJpdFhPck5vZGU6
OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6Qml0T3JOb2RlOjpldmFsdWF0ZSk6CisgICAgICAg
IChLSlM6OnZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQpOgorICAgICAgICAoS0pTOjpGb3JJ
bk5vZGU6OmV4ZWN1dGUpOgorICAgICAgICAoS0pTOjpUcnlOb2RlOjpleGVjdXRlKToKKyAgICAg
ICAgKEtKUzo6RnVuY0RlY2xOb2RlOjptYWtlRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpGdW5j
RXhwck5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBranMvbnVtYmVyX29iamVjdC5jcHA6Cisg
ICAgICAgIChLSlM6Ok51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAg
KEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvRml4
ZWQpOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToKKyAgICAg
ICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAoS0pTOjpOdW1i
ZXJPYmplY3RJbXA6Ok51bWJlck9iamVjdEltcCk6CisgICAgICAgIChLSlM6Ok51bWJlck9iamVj
dEltcDo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Ok51bWJlck9iamVjdEltcDo6
Y29uc3RydWN0KToKKyAgICAgICAgKEtKUzo6TnVtYmVyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlv
bik6CisgICAgICAgICoga2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0Ojpk
ZWZpbmVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVyKToKKyAg
ICAgICAgKEtKUzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChLSlM6OkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAqIGtqcy9vYmplY3QuaDoKKyAgICAgICAgKiBranMvb2JqZWN0X29i
amVjdC5jcHA6CisgICAgICAgIChLSlM6Ok9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBl
KToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAg
ICAoS0pTOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChLSlM6Ok9iamVjdE9i
amVjdEltcDo6T2JqZWN0T2JqZWN0SW1wKToKKyAgICAgICAgKEtKUzo6T2JqZWN0T2JqZWN0SW1w
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0LmNwcDoKKyAgICAgICAg
KEtKUzo6UmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUpOgorICAgICAgICAoS0pTOjpy
ZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChLSlM6OlJlZ0V4cEltcDo6Z2V0VmFs
dWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OlJlZ0V4cE9iamVjdEltcDo6UmVnRXhwT2JqZWN0
SW1wKToKKyAgICAgICAgKEtKUzo6UmVnRXhwT2JqZWN0SW1wOjphcnJheU9mTWF0Y2hlcyk6Cisg
ICAgICAgIChLSlM6OlJlZ0V4cE9iamVjdEltcDo6Z2V0QmFja3JlZik6CisgICAgICAgIChLSlM6
OlJlZ0V4cE9iamVjdEltcDo6Z2V0TGFzdFBhcmVuKToKKyAgICAgICAgKEtKUzo6UmVnRXhwT2Jq
ZWN0SW1wOjpnZXRMZWZ0Q29udGV4dCk6CisgICAgICAgIChLSlM6OlJlZ0V4cE9iamVjdEltcDo6
Z2V0UmlnaHRDb250ZXh0KToKKyAgICAgICAgKEtKUzo6UmVnRXhwT2JqZWN0SW1wOjpnZXRWYWx1
ZVByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6UmVnRXhwT2JqZWN0SW1wOjpjcmVhdGVSZWdFeHBJ
bXApOgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL3N0cmlu
Z19vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFu
Y2UpOgorICAgICAgICAoS0pTOjpTdHJpbmdJbnN0YW5jZTo6bGVuZ3RoR2V0dGVyKToKKyAgICAg
ICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nSW5zdGFuY2VOdW1lcmljUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoS0pTOjpTdHJpbmdQ
cm90b3R5cGU6OlN0cmluZ1Byb3RvdHlwZSk6CisgICAgICAgIChLSlM6OnJlcGxhY2UpOgorICAg
ICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNDaGFyQXQpOgorICAgICAgICAoS0pTOjpzdHJpbmdQ
cm90b0Z1bmNDaGFyQ29kZUF0KToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQ29uY2F0
KToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAgIChLSlM6
OnN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9G
dW5jTWF0Y2gpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTZWFyY2gpOgorICAgICAg
ICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJv
dG9GdW5jU2xpY2UpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAg
ICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChLSlM6OnN0cmluZ1By
b3RvRnVuY1N1YnN0cmluZyk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJD
YXNlKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAg
ICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZUxvd2VyQ2FzZSk6CisgICAgICAgIChLSlM6
OnN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKToKKyAgICAgICAgKEtKUzo6c3RyaW5n
UHJvdG9GdW5jTG9jYWxlQ29tcGFyZSk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0Jp
Zyk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEtKUzo6
c3RyaW5nUHJvdG9GdW5jQmxpbmspOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNCb2xk
KToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoS0pTOjpz
dHJpbmdQcm90b0Z1bmNJdGFsaWNzKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3Ry
aWtlKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEtKUzo6
c3RyaW5nUHJvdG9GdW5jU3VwKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jRm9udGNv
bG9yKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAo
S0pTOjpzdHJpbmdQcm90b0Z1bmNBbmNob3IpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1
bmNMaW5rKToKKyAgICAgICAgKEtKUzo6U3RyaW5nT2JqZWN0SW1wOjpTdHJpbmdPYmplY3RJbXAp
OgorICAgICAgICAoS0pTOjpTdHJpbmdPYmplY3RJbXA6OmNvbnN0cnVjdCk6CisgICAgICAgIChL
SlM6OlN0cmluZ09iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpTdHJp
bmdPYmplY3RGdW5jSW1wOjpTdHJpbmdPYmplY3RGdW5jSW1wKToKKyAgICAgICAgKEtKUzo6U3Ry
aW5nT2JqZWN0RnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIGtqcy9zdHJpbmdf
b2JqZWN0Lmg6CisgICAgICAgIChLSlM6OlN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQ6OlN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOgorICAg
ICAgICAqIGtqcy90ZXN0a2pzLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6R2xvYmFsT2Jq
ZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SdW4pOgorICAg
ICAgICAoZnVuY3Rpb25SZWFkbGluZSk6CisgICAgICAgIChranNtYWluKToKKyAgICAgICAgKiBr
anMvdXN0cmluZy5oOgorICAgICAgICAqIGtqcy92YWx1ZS5jcHA6CisgICAgICAgIChLSlM6OkpT
Q2VsbDo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKEtKUzo6anNTdHJpbmcpOgorICAgICAgICAo
S0pTOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKEtKUzo6anNOdW1iZXJDZWxsKToKKyAgICAg
ICAgKiBranMvdmFsdWUuaDoKKyAgICAgICAgKEtKUzo6anNOYU4pOgorICAgICAgICAoS0pTOjpq
c051bWJlcik6CisgICAgICAgIChLSlM6OmpzTnVtYmVyRnJvbUFuZCk6CisgICAgICAgIChLSlM6
OkpTQ2VsbDo6bWFya2VkKToKKyAgICAgICAgKEtKUzo6SlNDZWxsOjptYXJrKToKKyAgICAgICAg
KEtKUzo6SlNWYWx1ZTo6dG9KU051bWJlcik6CisgICAgICAgIFJlbW92ZWQgY29sbGVjdE9uTWFp
blRocmVhZE9ubHksIGFzIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGNvbGxlY3Qgbm93LiBSZXBs
YWNlZCBjYWxscyB0bworICAgICAgICBzdGF0aWMgQ29sbGVjdG9yIG1ldGhvZHMgd2l0aCBjYWxs
cyB0byBwZXItdGhyZWFkIEhlYXAgb25lcy4KKwogMjAwOC0wNC0yOSAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEJVSUxEIEZJWCBmb3IgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24g
MzI3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzggKzEsMyBAQAotX0pTQ2hlY2tTY3JpcHRTeW50YXgKLV9KU0NsYXNzQ3JlYXRl
Ci1fSlNDbGFzc1JlbGVhc2UKLV9KU0NsYXNzUmV0YWluCi1fSlNDb250ZXh0R2V0R2xvYmFsT2Jq
ZWN0Ci1fSlNFdmFsdWF0ZVNjcmlwdAotX0pTR2FyYmFnZUNvbGxlY3QKLV9KU0dsb2JhbENvbnRl
eHRDcmVhdGUKLV9KU0dsb2JhbENvbnRleHRSZWxlYXNlCi1fSlNHbG9iYWxDb250ZXh0UmV0YWlu
Ci1fSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcgotX0pTT2JqZWN0Q2FsbEFzRnVuY3Rpb24KLV9K
U09iamVjdENvcHlQcm9wZXJ0eU5hbWVzCi1fSlNPYmplY3REZWxldGVQcm9wZXJ0eQotX0pTT2Jq
ZWN0R2V0UHJpdmF0ZQotX0pTT2JqZWN0R2V0UHJvcGVydHkKLV9KU09iamVjdEdldFByb3BlcnR5
QXRJbmRleAotX0pTT2JqZWN0R2V0UHJvdG90eXBlCi1fSlNPYmplY3RIYXNQcm9wZXJ0eQotX0pT
T2JqZWN0SXNDb25zdHJ1Y3RvcgotX0pTT2JqZWN0SXNGdW5jdGlvbgotX0pTT2JqZWN0TWFrZQot
X0pTT2JqZWN0TWFrZUNvbnN0cnVjdG9yCi1fSlNPYmplY3RNYWtlRnVuY3Rpb24KLV9KU09iamVj
dE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjawotX0pTT2JqZWN0U2V0UHJpdmF0ZQotX0pTT2JqZWN0
U2V0UHJvcGVydHkKLV9KU09iamVjdFNldFByb3BlcnR5QXRJbmRleAotX0pTT2JqZWN0U2V0UHJv
dG90eXBlCi1fSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUKLV9KU1Byb3BlcnR5TmFt
ZUFycmF5R2V0Q291bnQKLV9KU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFtZUF0SW5kZXgKLV9KU1By
b3BlcnR5TmFtZUFycmF5UmVsZWFzZQotX0pTUHJvcGVydHlOYW1lQXJyYXlSZXRhaW4KLV9KU1N0
cmluZ0NvcHlDRlN0cmluZwotX0pTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nCi1fSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycwotX0pTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nCi1fSlNT
dHJpbmdHZXRDaGFyYWN0ZXJzUHRyCi1fSlNTdHJpbmdHZXRMZW5ndGgKLV9KU1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUKLV9KU1N0cmluZ0dldFVURjhDU3RyaW5nCi1fSlNTdHJpbmdJ
c0VxdWFsCi1fSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZwotX0pTU3RyaW5nUmVsZWFzZQot
X0pTU3RyaW5nUmV0YWluCi1fSlNWYWx1ZUdldFR5cGUKLV9KU1ZhbHVlSXNCb29sZWFuCi1fSlNW
YWx1ZUlzRXF1YWwKLV9KU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IKLV9KU1ZhbHVlSXNO
dWxsCi1fSlNWYWx1ZUlzTnVtYmVyCi1fSlNWYWx1ZUlzT2JqZWN0Ci1fSlNWYWx1ZUlzT2JqZWN0
T2ZDbGFzcwotX0pTVmFsdWVJc1N0cmljdEVxdWFsCi1fSlNWYWx1ZUlzU3RyaW5nCi1fSlNWYWx1
ZUlzVW5kZWZpbmVkCi1fSlNWYWx1ZU1ha2VCb29sZWFuCi1fSlNWYWx1ZU1ha2VOdWxsCi1fSlNW
YWx1ZU1ha2VOdW1iZXIKLV9KU1ZhbHVlTWFrZVN0cmluZwotX0pTVmFsdWVNYWtlVW5kZWZpbmVk
Ci1fSlNWYWx1ZVByb3RlY3QKLV9KU1ZhbHVlVG9Cb29sZWFuCi1fSlNWYWx1ZVRvTnVtYmVyCi1f
SlNWYWx1ZVRvT2JqZWN0Ci1fSlNWYWx1ZVRvU3RyaW5nQ29weQotX0pTVmFsdWVVbnByb3RlY3QK
LV9XVEZMb2cKLV9XVEZMb2dWZXJib3NlCi1fV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWls
dXJlCi1fV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZQotX1dURlJlcG9ydEFzc2VydGlvbkZhaWx1
cmVXaXRoTWVzc2FnZQotX1dURlJlcG9ydEVycm9yCi1fV1RGUmVwb3J0RmF0YWxFcnJvcgogX19a
MTJqc1JlZ0V4cEZyZWVQOEpTUmVnRXhwCiBfX1oxNWpzUmVnRXhwQ29tcGlsZVBLdGkyNEpTUmVn
RXhwSWdub3JlQ2FzZU9wdGlvbjIzSlNSZWdFeHBNdWx0aWxpbmVPcHRpb25QalBQS2MKIF9fWjE1
anNSZWdFeHBFeGVjdXRlUEs4SlNSZWdFeHBQS3RpaVBpaQpAQCAtOTYsMTEgKzIxLDExIEBAIF9f
Wk4zS0pTMTFQcm9wZXJ0eU1hcDExZ2V0TG9jYXRpb25FUktOU18KIF9fWk4zS0pTMTFQcm9wZXJ0
eU1hcDVjbGVhckV2CiBfX1pOM0tKUzExUHJvcGVydHlNYXBEMUV2CiBfX1pOM0tKUzEyRGF0ZUlu
c3RhbmNlNGluZm9FCitfX1pOM0tKUzEyanNOdW1iZXJDZWxsRVBOU185RXhlY1N0YXRlRWQKIF9f
Wk4zS0pTMTJQcm9wZXJ0eVNsb3QxNXVuZGVmaW5lZEdldHRlckVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OEpTT2JqZWN0RVJLTlNfMTBJZGVudGlmaWVyRVJLUzBfCi1fX1pOM0tKUzEyanNOdW1iZXJDZWxs
RWQKIF9fWk4zS0pTMTNBcnJheUluc3RhbmNlNGluZm9FCitfX1pOM0tKUzEzanNPd25lZFN0cmlu
Z0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNLSlMxM1N0YXRlbWVudE5vZGU2
c2V0TG9jRWlpCi1fX1pOM0tKUzEzanNPd25lZFN0cmluZ0VSS05TXzdVU3RyaW5nRQogX19aTjNL
SlMxNEpTR2xvYmFsT2JqZWN0MTBnbG9iYWxFeGVjRXYKIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVj
dDE2c3RvcFRpbWVvdXRDaGVja0V2CiBfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3QxN3B1dFdpdGhB
dHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVq
CkBAIC0xMTEsMTQgKzM2LDE0IEBAIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVjdDRpbml0RVBOU184
SlNPYmoKIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVjdDRtYXJrRXYKIF9fWk4zS0pTMTRKU0dsb2Jh
bE9iamVjdDVyZXNldEVQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3REMkV2
CitfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3Rud0VtCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2Ux
NGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNL
SlMxNFN0cmluZ0luc3RhbmNlMTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0YXRlRVJOU18x
N1Byb3BlcnR5TmFtZUFycmF5RQotX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMThnZXRPd25Qcm9w
ZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlT
bG90RQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlF
eGVjU3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUKK19fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTE4
Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTNwdXRFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRQogX19aTjNLSlMxNFN0cmluZ0luc3Rh
bmNlNGluZm9FCi1fX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2VDMUVQTlNfOEpTT2JqZWN0RVJLTlNf
N1VTdHJpbmdFCi1fX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2VDMkVQTlNfOEpTT2JqZWN0RVJLTlNf
N1VTdHJpbmdFCitfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2VDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OEpTT2JqZWN0RVJLTlNfN1VTdHJpbmdFCiBfX1pOM0tKUzE1R2xvYmFsRXhlY1N0YXRlQzFFUE5T
XzE0SlNHbG9iYWxPYmplY3RFUE5TXzhKU09iamVjdEUKIF9fWk4zS0pTMTVHbG9iYWxFeGVjU3Rh
dGVEMUV2CiBfX1pOM0tKUzE1SlNXcmFwcGVyT2JqZWN0NG1hcmtFdgpAQCAtMTI3LDM3ICs1Miw0
NyBAQCBfX1pOM0tKUzE2SlNWYXJpYWJsZU9iamVjdDE2Z2V0UHJvcGVydHlOCiBfX1pOM0tKUzE2
UGFyc2VyUmVmQ291bnRlZDNyZWZFdgogX19aTjNLSlMxNlBhcnNlclJlZkNvdW50ZWQ1ZGVyZWZF
dgogX19aTjNLSlMxN1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTlNfN1VTdHJpbmczUmVwRQotX19a
TjNLSlMxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE3RnVuY3Rpb25Q
cm90b3R5cGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUE5TXzdKU1ZhbHVlRVMyX1BOU184SlNPYmpl
Y3RFUktOU180TGlzdEVFCiBfX1pOM0tKUzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4ZWNT
dGF0ZUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNfN0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVS
S05TXzRMaXN0RUUKK19fWk4zS0pTMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRl
RVBOU18xN0Z1bmN0aW9uUHJvdG90eXBlRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183SlNWYWx1
ZUVTMl9QTlNfOEpTT2JqZWN0RVJLTlNfNExpc3RFRQorX19aTjNLSlMxOWluaXRpYWxpemVUaHJl
YWRpbmdFdgogX19aTjNLSlMxOUludGVybmFsRnVuY3Rpb25JbXA0aW5mb0UKIF9fWk4zS0pTMTlJ
bnRlcm5hbEZ1bmN0aW9uSW1wQzJFUE5TXzE3RnVuY3Rpb25Qcm90b3R5cGVFUktOU18xMElkZW50
aWZpZXJFCi1fX1pOM0tKUzE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM0tKUzIzb2JqZWN0
UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEVSS05TXzRMaXN0
RQorX19aTjNLSlM0SGVhcDEwdGhyZWFkSGVhcEV2CitfX1pOM0tKUzRIZWFwMTVyZWNvcmRFeHRy
YUNvc3RFbQorX19aTjNLSlM0SGVhcDE3Z2xvYmFsT2JqZWN0Q291bnRFdgorX19aTjNLSlM0SGVh
cDIwcHJvdGVjdGVkT2JqZWN0Q291bnRFdgorX19aTjNLSlM0SGVhcDI1cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50c0V2CitfX1pOM0tKUzRIZWFwMjZwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudEV2
CitfX1pOM0tKUzRIZWFwNGhlYXBFUE5TXzdKU1ZhbHVlRQorX19aTjNLSlM0SGVhcDRzaXplRXYK
K19fWk4zS0pTNEhlYXA3Y29sbGVjdEV2CitfX1pOM0tKUzRIZWFwN3Byb3RlY3RFUE5TXzdKU1Zh
bHVlRQorX19aTjNLSlM0SGVhcDhhbGxvY2F0ZUVtCitfX1pOM0tKUzRIZWFwOXVucHJvdGVjdEVQ
TlNfN0pTVmFsdWVFCiBfX1pOM0tKUzRMaXN0MTVleHBhbmRBbmRBcHBlbmRFUE5TXzdKU1ZhbHVl
RQotX19aTjNLSlM0TGlzdDdtYXJrU2V0RXYKIF9fWk4zS0pTNkpTQ2VsbDlnZXRPYmplY3RFdgot
X19aTjNLSlM2SlNDZWxsbndFbQorX19aTjNLSlM2SlNDZWxsbndFbVBOU185RXhlY1N0YXRlRQog
X19aTjNLSlM2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUV2CiBfX1pOM0tKUzZKU0xvY2sxMkRyb3BB
bGxMb2Nrc0QxRXYKLV9fWk4zS0pTNkpTTG9jazE0cmVnaXN0ZXJUaHJlYWRFdgogX19aTjNLSlM2
SlNMb2NrNGxvY2tFdgogX19aTjNLSlM2SlNMb2NrNnVubG9ja0V2CiBfX1pOM0tKUzZKU0xvY2s5
bG9ja0NvdW50RXYKIF9fWk4zS0pTNlBhcnNlcjVwYXJzZUVpUEt0alBpUzNfUE5TXzdVU3RyaW5n
RQogX19aTjNLSlM2cGFyc2VyRXYKIF9fWk4zS0pTNnN0cnRvZEVQS2NQUGMKLV9fWk4zS0pTN0NT
dHJpbmdEMUV2CiBfX1pOM0tKUzdDU3RyaW5nYVNFUktTMF8KK19fWk4zS0pTN0NTdHJpbmdEMUV2
CiBfX1pOM0tKUzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hFUEt0aQogX19aTjNLSlM3VVN0cmlu
ZzNSZXA0bnVsbEUKIF9fWk4zS0pTN1VTdHJpbmczUmVwN2Rlc3Ryb3lFdgogX19aTjNLSlM3VVN0
cmluZzRmcm9tRWoKIF9fWk4zS0pTN1VTdHJpbmc2YXBwZW5kRVBLYwogX19aTjNLSlM3VVN0cmlu
ZzZhcHBlbmRFUktTMF8KK19fWk4zS0pTN1VTdHJpbmdhU0VQS2MKIF9fWk4zS0pTN1VTdHJpbmdD
MUVQS2MKIF9fWk4zS0pTN1VTdHJpbmdDMUVQS3RpCiBfX1pOM0tKUzdVU3RyaW5nQzFFUktTMF9T
Ml8KLV9fWk4zS0pTN1VTdHJpbmdhU0VQS2MKIF9fWk4zS0pTOERlYnVnZ2VyMTJzb3VyY2VVbnVz
ZWRFUE5TXzlFeGVjU3RhdGVFaQogX19aTjNLSlM4RGVidWdnZXI2YXR0YWNoRVBOU18xNEpTR2xv
YmFsT2JqZWN0RQogX19aTjNLSlM4RGVidWdnZXI2ZGV0YWNoRVBOU18xNEpTR2xvYmFsT2JqZWN0
RQpAQCAtMTcxLDM4ICsxMDYsMjcgQEAgX19aTjNLSlM4SlNPYmplY3QxMmxvb2t1cEdldHRlckVQ
TlNfOUV4ZQogX19aTjNLSlM4SlNPYmplY3QxMmxvb2t1cFNldHRlckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckUKIF9fWk4zS0pTOEpTT2JqZWN0MTJyZW1vdmVEaXJlY3RFUktOU18x
MElkZW50aWZpZXJFCiBfX1pOM0tKUzhKU09iamVjdDE0Y2FsbEFzRnVuY3Rpb25FUE5TXzlFeGVj
U3RhdGVFUFMwX1JLTlNfNExpc3RFCi1fX1pOM0tKUzhKU09iamVjdDE0ZGVsZXRlUHJvcGVydHlF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzhKU09iamVjdDE0ZGVs
ZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFagorX19aTjNLSlM4SlNPYmplY3QxNGRlbGV0ZVBy
b3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlM4SlNPYmpl
Y3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJy
YXlFCiBfX1pOM0tKUzhKU09iamVjdDE3cHV0RGlyZWN0RnVuY3Rpb25FUE5TXzE5SW50ZXJuYWxG
dW5jdGlvbkltcEVpCi1fX1pOM0tKUzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWoKIF9fWk4zS0pTOEpTT2Jq
ZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWoKK19f
Wk4zS0pTOEpTT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagogX19aTjNLSlM4SlNPYmplY3QxOGdldE93blByb3Bl
cnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNLSlM4SlNP
YmplY3QxOGdldFByaW1pdGl2ZU51bWJlckVQTlNfOUV4ZWNTdGF0ZUVSZFJQTlNfN0pTVmFsdWVF
CiBfX1pOM0tKUzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVSTlNfMTJQcm9wZXJ0
eVNsb3RFUFBOU183SlNWYWx1ZUUKLV9fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzhKU09iamVjdDNwdXRF
UE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKK19fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzhKU09i
amVjdDRjYWxsRVBOU185RXhlY1N0YXRlRVBTMF9SS05TXzRMaXN0RQogX19aTjNLSlM4SlNPYmpl
Y3Q0bWFya0V2CiBfX1pOM0tKUzhKU09iamVjdDljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUktO
U180TGlzdEUKIF9fWk4zS0pTOEpTT2JqZWN0OWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzRMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdFaQogX19aTjNLSlM4SlNPYmpl
Y3Q5cHV0RGlyZWN0RVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVpCi1fX1pOM0tKUzhK
U09iamVjdDlwdXREaXJlY3RFUktOU18xMElkZW50aWZpZXJFaWkKK19fWk4zS0pTOGpzU3RyaW5n
RVBOU185RXhlY1N0YXRlRVBLYworX19aTjNLSlM4anNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zS0pTOFByb2ZpbGVyMTNzdG9wUHJvZmlsaW5nRXYKIF9fWk4zS0pT
OFByb2ZpbGVyMTRzdGFydFByb2ZpbGluZ0VqCiBfX1pOM0tKUzhQcm9maWxlcjhwcm9maWxlckV2
Ci1fX1pOM0tKUzhqc1N0cmluZ0VQS2MKLV9fWk4zS0pTOGpzU3RyaW5nRVJLTlNfN1VTdHJpbmdF
Ci1fX1pOM0tKUzlDb2xsZWN0b3IxNXJlY29yZEV4dHJhQ29zdEVtCi1fX1pOM0tKUzlDb2xsZWN0
b3IxN2dsb2JhbE9iamVjdENvdW50RXYKLV9fWk4zS0pTOUNvbGxlY3RvcjIwcHJvdGVjdGVkT2Jq
ZWN0Q291bnRFdgotX19aTjNLSlM5Q29sbGVjdG9yMjNjb2xsZWN0T25NYWluVGhyZWFkT25seUVQ
TlNfN0pTVmFsdWVFCi1fX1pOM0tKUzlDb2xsZWN0b3IyNXByb3RlY3RlZE9iamVjdFR5cGVDb3Vu
dHNFdgotX19aTjNLSlM5Q29sbGVjdG9yMjZwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudEV2Ci1f
X1pOM0tKUzlDb2xsZWN0b3I0c2l6ZUV2Ci1fX1pOM0tKUzlDb2xsZWN0b3I3Y29sbGVjdEV2Ci1f
X1pOM0tKUzlDb2xsZWN0b3I3cHJvdGVjdEVQTlNfN0pTVmFsdWVFCi1fX1pOM0tKUzlDb2xsZWN0
b3I5dW5wcm90ZWN0RVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTZXFFUktOU183VVN0cmluZ0VQS2MK
IF9fWk4zV1RGMTBmYXN0Q2FsbG9jRW1tCiBfX1pOM1dURjEwZmFzdE1hbGxvY0VtCkBAIC0yNjAs
OCArMTg0LDggQEAgX19aTkszS0pTN1VTdHJpbmc1YXNjaWlFdgogX19aTkszS0pTN1VTdHJpbmc2
aXM4Qml0RXYKIF9fWk5LM0tKUzdVU3RyaW5nOHRvVUludDMyRVBiCiBfX1pOSzNLSlM3VVN0cmlu
Zzh0b1VJbnQzMkVQYmIKLV9fWk5LM0tKUzhKU09iamVjdDExaGFzUHJvcGVydHlFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOSzNLSlM4SlNPYmplY3QxMWhhc1Byb3BlcnR5
RVBOU185RXhlY1N0YXRlRWoKK19fWk5LM0tKUzhKU09iamVjdDExaGFzUHJvcGVydHlFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOSzNLSlM4SlNPYmplY3QxMmRlZmF1bHRW
YWx1ZUVQTlNfOUV4ZWNTdGF0ZUVOU182SlNUeXBlRQogX19aTkszS0pTOEpTT2JqZWN0MTJ0b1Ro
aXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNLSlM4SlNPYmplY3QxNGltcGxlbWVudHND
YWxsRXYKQEAgLTI2OSw4ICsxOTMsOCBAQCBfX1pOSzNLSlM4SlNPYmplY3QxNHRvR2xvYmFsT2Jq
ZWN0RVBOU185CiBfX1pOSzNLSlM4SlNPYmplY3QxOWltcGxlbWVudHNDb25zdHJ1Y3RFdgogX19a
TkszS0pTOEpTT2JqZWN0MjFnZXRQcm9wZXJ0eUF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFUmoKIF9fWk5LM0tKUzhKU09iamVjdDIxaW1wbGVtZW50c0hhc0luc3Rh
bmNlRXYKLV9fWk5LM0tKUzhKU09iamVjdDNnZXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFCiBfX1pOSzNLSlM4SlNPYmplY3QzZ2V0RVBOU185RXhlY1N0YXRlRWoKK19fWk5LM0tK
UzhKU09iamVjdDNnZXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOSzNL
SlM4SlNPYmplY3Q0dHlwZUV2CiBfX1pOSzNLSlM4SlNPYmplY3Q4dG9OdW1iZXJFUE5TXzlFeGVj
U3RhdGVFCiBfX1pOSzNLSlM4SlNPYmplY3Q4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVFCkBAIC0y
ODksNiArMjEzLDgxIEBAIF9fWlRWTjNLSlMxNUpTV3JhcHBlck9iamVjdEUKIF9fWlRWTjNLSlMx
NkpTVmFyaWFibGVPYmplY3RFCiBfX1pUVk4zS0pTMTlJbnRlcm5hbEZ1bmN0aW9uSW1wRQogX19a
VFZOM0tKUzhKU09iamVjdEUKK19KU0NoZWNrU2NyaXB0U3ludGF4CitfSlNDbGFzc0NyZWF0ZQor
X0pTQ2xhc3NSZWxlYXNlCitfSlNDbGFzc1JldGFpbgorX0pTQ29udGV4dEdldEdsb2JhbE9iamVj
dAogX2pzY29yZV9jb2xsZWN0b3JfaW50cm9zcGVjdGlvbgogX2pzY29yZV9mYXN0bWFsbG9jX2lu
dHJvc3BlY3Rpb24KK19KU0V2YWx1YXRlU2NyaXB0CitfSlNHYXJiYWdlQ29sbGVjdAorX0pTR2xv
YmFsQ29udGV4dENyZWF0ZQorX0pTR2xvYmFsQ29udGV4dFJlbGVhc2UKK19KU0dsb2JhbENvbnRl
eHRSZXRhaW4KK19KU09iamVjdENhbGxBc0NvbnN0cnVjdG9yCitfSlNPYmplY3RDYWxsQXNGdW5j
dGlvbgorX0pTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMKK19KU09iamVjdERlbGV0ZVByb3BlcnR5
CitfSlNPYmplY3RHZXRQcml2YXRlCitfSlNPYmplY3RHZXRQcm9wZXJ0eQorX0pTT2JqZWN0R2V0
UHJvcGVydHlBdEluZGV4CitfSlNPYmplY3RHZXRQcm90b3R5cGUKK19KU09iamVjdEhhc1Byb3Bl
cnR5CitfSlNPYmplY3RJc0NvbnN0cnVjdG9yCitfSlNPYmplY3RJc0Z1bmN0aW9uCitfSlNPYmpl
Y3RNYWtlCitfSlNPYmplY3RNYWtlQ29uc3RydWN0b3IKK19KU09iamVjdE1ha2VGdW5jdGlvbgor
X0pTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrCitfSlNPYmplY3RTZXRQcml2YXRlCitf
SlNPYmplY3RTZXRQcm9wZXJ0eQorX0pTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4CitfSlNPYmpl
Y3RTZXRQcm90b3R5cGUKK19KU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZQorX0pTUHJv
cGVydHlOYW1lQXJyYXlHZXRDb3VudAorX0pTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRl
eAorX0pTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlCitfSlNQcm9wZXJ0eU5hbWVBcnJheVJldGFp
bgorX0pTU3RyaW5nQ29weUNGU3RyaW5nCitfSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcKK19K
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzCitfSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcKK19KU1N0cmluZ0dldENoYXJhY3RlcnNQdHIKK19KU1N0cmluZ0dldExlbmd0aAorX0pTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZQorX0pTU3RyaW5nR2V0VVRGOENTdHJpbmcKK19K
U1N0cmluZ0lzRXF1YWwKK19KU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nCitfSlNTdHJpbmdS
ZWxlYXNlCitfSlNTdHJpbmdSZXRhaW4KK19KU1ZhbHVlR2V0VHlwZQorX0pTVmFsdWVJc0Jvb2xl
YW4KK19KU1ZhbHVlSXNFcXVhbAorX0pTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcgorX0pT
VmFsdWVJc051bGwKK19KU1ZhbHVlSXNOdW1iZXIKK19KU1ZhbHVlSXNPYmplY3QKK19KU1ZhbHVl
SXNPYmplY3RPZkNsYXNzCitfSlNWYWx1ZUlzU3RyaWN0RXF1YWwKK19KU1ZhbHVlSXNTdHJpbmcK
K19KU1ZhbHVlSXNVbmRlZmluZWQKK19KU1ZhbHVlTWFrZUJvb2xlYW4KK19KU1ZhbHVlTWFrZU51
bGwKK19KU1ZhbHVlTWFrZU51bWJlcgorX0pTVmFsdWVNYWtlU3RyaW5nCitfSlNWYWx1ZU1ha2VV
bmRlZmluZWQKK19KU1ZhbHVlUHJvdGVjdAorX0pTVmFsdWVUb0Jvb2xlYW4KK19KU1ZhbHVlVG9O
dW1iZXIKK19KU1ZhbHVlVG9PYmplY3QKK19KU1ZhbHVlVG9TdHJpbmdDb3B5CitfSlNWYWx1ZVVu
cHJvdGVjdAogX2tKU0NsYXNzRGVmaW5pdGlvbkVtcHR5CitfV1RGTG9nCitfV1RGTG9nVmVyYm9z
ZQorX1dURlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZQorX1dURlJlcG9ydEFzc2VydGlv
bkZhaWx1cmUKK19XVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UKK19XVEZSZXBv
cnRFcnJvcgorX1dURlJlcG9ydEZhdGFsRXJyb3IKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShy
ZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NiwxMSArNzYsMTMgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29u
dGV4dFJlZiBjdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTR2FyYmFnZUNvbGxlY3Qo
SlNDb250ZXh0UmVmKQordm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4dFJlZiBjdHgpCiB7
CiAgICAgSlNMb2NrIGxvY2s7Ci0gICAgaWYgKCFDb2xsZWN0b3I6OmlzQnVzeSgpKQotICAgICAg
ICBDb2xsZWN0b3I6OmNvbGxlY3QoKTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKKyAgICBpZiAoIWV4ZWMtPmhlYXAoKS0+aXNCdXN5KCkpCisgICAgICAgIGV4ZWMtPmhlYXAo
KS0+Y29sbGVjdCgpOwogICAgIC8vIEZJWE1FOiBQZXJoYXBzIHdlIHNob3VsZCB0cmlnZ2VyIGEg
c2Vjb25kIG1hcmsgYW5kIHN3ZWVwCiAgICAgLy8gb25jZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Ig
aXMgZG9uZSBpZiB0aGlzIGlzIGNhbGxlZCB3aGVuCiAgICAgLy8gdGhlIGNvbGxlY3RvciBpcyBi
dXN5LgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCBKU1Zh
bHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGCiAgICAgICAgIGlmIChPcGFxdWVK
U0NsYXNzOjpTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zID0ganNDbGFzcy0+
c3RhdGljRnVuY3Rpb25zKSB7CiAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSog
ZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgp
KSkgewogICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sg
Y2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QqIG8gPSBuZXcgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGNhbGxBc0Z1
bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogbyA9
IG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGNhbGxBc0Z1bmN0aW9uLCBwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3QocHJvcGVy
dHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNz
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJ
KHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6
OnByb3RvdHlwZShKU0NvbgogICAgICAgICAgICAgcGFyZW50UHJvdG90eXBlID0gcGFyZW50Q2xh
c3MtPnByb3RvdHlwZShjdHgpOyAvLyBjYW4gYmUgbnVsbAogICAgICAgICBpZiAoIXBhcmVudFBy
b3RvdHlwZSkKICAgICAgICAgICAgIHBhcmVudFByb3RvdHlwZSA9IGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgICAgIGNhY2hlZFByb3RvdHlwZSA9
IG5ldyBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0PihleGVjLCBwcm90b3R5cGVDbGFzcywgcGFy
ZW50UHJvdG90eXBlLCB0aGlzKTsgLy8gc2V0IG91cnNlbGYgYXMgdGhlIG9iamVjdCdzIHByaXZh
dGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KKyAg
ICAgICAgY2FjaGVkUHJvdG90eXBlID0gbmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2Jq
ZWN0PihleGVjLCBwcm90b3R5cGVDbGFzcywgcGFyZW50UHJvdG90eXBlLCB0aGlzKTsgLy8gc2V0
IG91cnNlbGYgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91
ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICB9CiAgICAgcmV0dXJuIGNhY2hlZFByb3Rv
dHlwZTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMzI3
NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NCwxMyArNzQsMTMgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlKEpTQ29udGV4dFJl
ZiBjdAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKIAogICAgIGlmICghanNDbGFz
cykKLSAgICAgICAgcmV0dXJuIHRvUmVmKG5ldyBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSk7IC8vIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50
CisgICAgICAgIHJldHVybiB0b1JlZihuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKTsgLy8gc2xpZ2h0bHkgbW9yZSBlZmZp
Y2llbnQKIAogICAgIEpTVmFsdWUqIGpzUHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGN0
eCk7CiAgICAgaWYgKCFqc1Byb3RvdHlwZSkKICAgICAgICAganNQcm90b3R5cGUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogCi0gICAgcmV0dXJuIHRv
UmVmKG5ldyBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0PihleGVjLCBqc0NsYXNzLCBqc1Byb3Rv
dHlwZSwgZGF0YSkpOworICAgIHJldHVybiB0b1JlZihuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNPYmplY3Q+KGV4ZWMsIGpzQ2xhc3MsIGpzUHJvdG90eXBlLCBkYXRhKSk7CiB9CiAKIEpT
T2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIEpTU3RyaW5nUmVmIG5hbWUsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxs
QXNGdW5jdGlvbikKQEAgLTg5LDcgKzg5LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRnVu
Y3Rpb25XaXRoQ2FsbAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBJZGVu
dGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBJZGVudGlmaWVyKHRvSlMobmFtZSkpIDogSWRlbnRpZmll
cigiYW5vbnltb3VzIik7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVmKG5ldyBKU0NhbGxiYWNrRnVu
Y3Rpb24oZXhlYywgY2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAgIHJldHVybiB0b1JlZihu
ZXcgKGV4ZWMpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBjYWxsQXNGdW5jdGlvbiwgbmFtZUlE
KSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ29udGV4dFJl
ZiBjdHgsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNhbGxBc0NvbnN0cnVjdG9yKQpAQCAtMTAxLDcgKzEwMSw3IEBAIEpTT2JqZWN0UmVmIEpT
T2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ28KICAgICAgICAgPyBqc0NsYXNzLT5wcm90b3R5cGUo
Y3R4KQogICAgICAgICA6IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCk7CiAgICAgCi0gICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5l
dyBKU0NhbGxiYWNrQ29uc3RydWN0b3IoZXhlYywganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3Ip
OworICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvcihleGVjLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7CiAg
ICAgY29uc3RydWN0b3ItPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBqc1Byb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHJl
dHVybiB0b1JlZihjb25zdHJ1Y3Rvcik7CiB9CkBAIC0xMTgsOCArMTE4LDggQEAgSlNPYmplY3RS
ZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24oSlNDb250ZQogICAgIAogICAgIExpc3QgYXJnczsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7IGkrKykKLSAgICAgICAg
YXJncy5hcHBlbmQoanNTdHJpbmcoVVN0cmluZyh0b0pTKHBhcmFtZXRlck5hbWVzW2ldKSkpKTsK
LSAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhVU3RyaW5nKGJvZHlSZXApKSk7CisgICAgICAgIGFy
Z3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcodG9KUyhwYXJhbWV0ZXJOYW1lc1tpXSkp
KSk7CisgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhlYywgVVN0cmluZyhib2R5UmVwKSkpOwog
CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25Db25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgYXJncywgbmFtZUlELCBVU3RyaW5n
KHNvdXJjZVVSTFJlcCksIHN0YXJ0aW5nTGluZU51bWJlcik7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAz
Mjc1NykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc2LDE3ICsxNzYsMTcgQEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW4oSlND
b250ZXh0UgogICAgIHJldHVybiB0b1JlZihqc0Jvb2xlYW4odmFsdWUpKTsKIH0KIAotSlNWYWx1
ZVJlZiBKU1ZhbHVlTWFrZU51bWJlcihKU0NvbnRleHRSZWYsIGRvdWJsZSB2YWx1ZSkKK0pTVmFs
dWVSZWYgSlNWYWx1ZU1ha2VOdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgZG91YmxlIHZhbHVlKQog
ewogICAgIEpTTG9jayBsb2NrOwotICAgIHJldHVybiB0b1JlZihqc051bWJlcih2YWx1ZSkpOwor
ICAgIHJldHVybiB0b1JlZihqc051bWJlcih0b0pTKGN0eCksIHZhbHVlKSk7CiB9CiAKLUpTVmFs
dWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiBzdHJpbmcp
CitKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nKEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5n
UmVmIHN0cmluZykKIHsKICAgICBKU0xvY2sgbG9jazsKICAgICBVU3RyaW5nOjpSZXAqIHJlcCA9
IHRvSlMoc3RyaW5nKTsKLSAgICByZXR1cm4gdG9SZWYoanNTdHJpbmcoVVN0cmluZyhyZXApKSk7
CisgICAgcmV0dXJuIHRvUmVmKGpzU3RyaW5nKHRvSlMoY3R4KSwgVVN0cmluZyhyZXApKSk7CiB9
CiAKIGJvb2wgSlNWYWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZh
bHVlKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDgg
QEAgbmFtZXNwYWNlIEtKUyAgewogCiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0
eU5hbWVzOwogICAgICAgICBMaXN0IGVtcHR5TGlzdDsKKyAgICAgICAgCisgICAgICAgIEhlYXAq
IGhlYXA7CiAgICAgfTsKIAogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
c2NyaXB0IGV4ZWN1dGlvbi4KQEAgLTEyMCw2ICsxMjIsOCBAQCBuYW1lc3BhY2UgS0pTICB7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIFJlZ0V4cE9iamVjdEltcFRhYmxlKEV4ZWNT
dGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9wZXJUaHJlYWREYXRhLT5SZWdFeHBPYmplY3RJ
bXBUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdUYWJsZShF
eGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPm1fcGVyVGhyZWFkRGF0YS0+c3RyaW5nVGFi
bGU7IH0KIAorICAgICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9wZXJUaHJlYWRE
YXRhLT5oZWFwOyB9CisKICAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IHJl
dHVybiAqbV9sb2NhbFN0b3JhZ2U7IH0KICAgICAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2UoTG9j
YWxTdG9yYWdlKiBzKSB7IG1fbG9jYWxTdG9yYWdlID0gczsgfQogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsMTUgKzQ3LDE0IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAjaWYgVVNFKE1V
TFRJUExFX1RIUkVBRFMpCiAgICAgaWYgKCFzX2R0b2FQNU11dGV4KSB7CiAgICAgICAgIHNfZHRv
YVA1TXV0ZXggPSBuZXcgTXV0ZXg7Ci0jaWYgIVBMQVRGT1JNKERBUldJTikgLy8gRGFyd2luIGhh
cyBwdGhyZWFkX21haW5fbnAoKSwgYW5kIGRvZXNuJ3QgbmVlZCByZWdpc3RlckFzTWFpblRocmVh
ZCgpIGNhbGxlZC4KLSAgICAgICAgQ29sbGVjdG9yOjpyZWdpc3RlckFzTWFpblRocmVhZCgpOwot
I2VuZGlmCisgICAgICAgIEhlYXA6OnRocmVhZEhlYXAoKTsKICAgICAgICAgVVN0cmluZzo6bnVs
bCgpOwogICAgICAgICBJZGVudGlmaWVyOjppbml0aWFsaXplSWRlbnRpZmllclRocmVhZGluZygp
OwogICAgICAgICBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCk7CiAgICAgICAgIGxleGVyKCk7
CiAgICAgICAgIGluaXREYXRlTWF0aCgpOwogICAgICAgICBKU0dsb2JhbE9iamVjdDo6dGhyZWFk
Q2xhc3NJbmZvSGFzaFRhYmxlcygpOworICAgICAgICBKU0dsb2JhbE9iamVjdDo6aGVhZCgpOwog
ICAgIH0KICNlbmRpZgogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw4ICsxMDIsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGdldEN1cnJlbnRUaW1lKCkKICNlbmRpZgogfQogCi1KU0dsb2JhbE9iamVjdCogSlNHbG9i
YWxPYmplY3Q6OnNfaGVhZCA9IDA7Ci0KIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlbGV0ZUFjdGl2
YXRpb25TdGFjaygpCiB7CiAgICAgQWN0aXZhdGlvblN0YWNrTm9kZSogcHJldk5vZGUgPSAwOwpA
QCAtMTIyLDkgKzEyMCwxMSBAQCBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKIAog
ICAgIGQoKS0+bmV4dC0+ZCgpLT5wcmV2ID0gZCgpLT5wcmV2OwogICAgIGQoKS0+cHJldi0+ZCgp
LT5uZXh0ID0gZCgpLT5uZXh0OwotICAgIHNfaGVhZCA9IGQoKS0+bmV4dDsKLSAgICBpZiAoc19o
ZWFkID09IHRoaXMpCi0gICAgICAgIHNfaGVhZCA9IDA7CisgICAgSlNHbG9iYWxPYmplY3QqJiBo
ZWFkT2JqZWN0ID0gaGVhZCgpOworICAgIGlmIChoZWFkT2JqZWN0ID09IHRoaXMpCisgICAgICAg
IGhlYWRPYmplY3QgPSBkKCktPm5leHQ7CisgICAgaWYgKGhlYWRPYmplY3QgPT0gdGhpcykKKyAg
ICAgICAgaGVhZE9iamVjdCA9IDA7CiAgICAgCiAgICAgZGVsZXRlQWN0aXZhdGlvblN0YWNrKCk7
CiAgICAgCkBAIC0xODYsMTcgKzE4NiwyOCBAQCBUaHJlYWRDbGFzc0luZm9IYXNoVGFibGVzKiBK
U0dsb2JhbE9iamVjCiAjZW5kaWYKIH0KIAorSlNHbG9iYWxPYmplY3QqJiBKU0dsb2JhbE9iamVj
dDo6aGVhZCgpCit7CisjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCisgICAgc3RhdGljIFRocmVh
ZFNwZWNpZmljPEpTR2xvYmFsT2JqZWN0Kj4gc2hhcmVkSW5zdGFuY2U7CisgICAgcmV0dXJuICpz
aGFyZWRJbnN0YW5jZTsKKyNlbHNlCisgICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBzaGFyZWRJ
bnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CisjZW5kaWYKK30KKwogdm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewogICAgIEFTU0VSVChK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCi0gICAgaWYgKHNfaGVhZCkg
ewotICAgICAgICBkKCktPnByZXYgPSBzX2hlYWQ7Ci0gICAgICAgIGQoKS0+bmV4dCA9IHNfaGVh
ZC0+ZCgpLT5uZXh0OwotICAgICAgICBzX2hlYWQtPmQoKS0+bmV4dC0+ZCgpLT5wcmV2ID0gdGhp
czsKLSAgICAgICAgc19oZWFkLT5kKCktPm5leHQgPSB0aGlzOworICAgIGlmIChKU0dsb2JhbE9i
amVjdComIGhlYWRPYmplY3QgPSBoZWFkKCkpIHsKKyAgICAgICAgZCgpLT5wcmV2ID0gaGVhZE9i
amVjdDsKKyAgICAgICAgZCgpLT5uZXh0ID0gaGVhZE9iamVjdC0+ZCgpLT5uZXh0OworICAgICAg
ICBoZWFkT2JqZWN0LT5kKCktPm5leHQtPmQoKS0+cHJldiA9IHRoaXM7CisgICAgICAgIGhlYWRP
YmplY3QtPmQoKS0+bmV4dCA9IHRoaXM7CiAgICAgfSBlbHNlCi0gICAgICAgIHNfaGVhZCA9IGQo
KS0+bmV4dCA9IGQoKS0+cHJldiA9IHRoaXM7CisgICAgICAgIGhlYWRPYmplY3QgPSBkKCktPm5l
eHQgPSBkKCktPnByZXYgPSB0aGlzOwogCiAgICAgcmVzZXRUaW1lb3V0Q2hlY2soKTsKICAgICBk
KCktPnRpbWVvdXRUaW1lID0gMDsKQEAgLTIxOCw2ICsyMjksNyBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAgICAgZCgpLT5wZXJUaHJlYWREYXRhLlJlZ0V4cE9i
amVjdEltcFRhYmxlID0gJnRocmVhZENsYXNzSW5mb0hhc2hUYWJsZXMoKS0+UmVnRXhwT2JqZWN0
SW1wVGFibGU7CiAgICAgZCgpLT5wZXJUaHJlYWREYXRhLnN0cmluZ1RhYmxlID0gJnRocmVhZENs
YXNzSW5mb0hhc2hUYWJsZXMoKS0+c3RyaW5nVGFibGU7CiAgICAgZCgpLT5wZXJUaHJlYWREYXRh
LnByb3BlcnR5TmFtZXMgPSBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCk7CisgICAgZCgpLT5w
ZXJUaHJlYWREYXRhLmhlYXAgPSBIZWFwOjp0aHJlYWRIZWFwKCk7CiAKICAgICBkKCktPmdsb2Jh
bEV4ZWMuc2V0KG5ldyBHbG9iYWxFeGVjU3RhdGUodGhpcywgdGhpc1ZhbHVlKSk7CiAKQEAgLTMx
Myw0MiArMzI1LDQyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkKCktPmdsb2JhbEV4ZWMuZ2V0KCk7CiAKICAgICAvLyBQ
cm90b3R5cGVzCi0gICAgZCgpLT5mdW5jdGlvblByb3RvdHlwZSA9IG5ldyBGdW5jdGlvblByb3Rv
dHlwZShleGVjKTsKLSAgICBkKCktPm9iamVjdFByb3RvdHlwZSA9IG5ldyBPYmplY3RQcm90b3R5
cGUoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSA9IG5ldyAoZXhlYykgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYyk7CisgICAgZCgpLT5vYmpl
Y3RQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCBkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5zZXRQcm90b3R5cGUo
ZCgpLT5vYmplY3RQcm90b3R5cGUpOwogCi0gICAgZCgpLT5hcnJheVByb3RvdHlwZSA9IG5ldyBB
cnJheVByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0gICAgZCgpLT5zdHJp
bmdQcm90b3R5cGUgPSBuZXcgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90
eXBlKTsKLSAgICBkKCktPmJvb2xlYW5Qcm90b3R5cGUgPSBuZXcgQm9vbGVhblByb3RvdHlwZShl
eGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAg
ZCgpLT5udW1iZXJQcm90b3R5cGUgPSBuZXcgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2Jq
ZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmRhdGVQcm90
b3R5cGUgPSBuZXcgRGF0ZVByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0g
ICAgZCgpLT5yZWdFeHBQcm90b3R5cGUgPSBuZXcgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIGQoKS0+
b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmVycm9y
UHJvdG90eXBlID0gbmV3IEVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBl
LCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICAKLSAgICBkKCktPmV2YWxFcnJvclByb3Rv
dHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBl
LCAiRXZhbEVycm9yIiwgIkV2YWxFcnJvciIpOwotICAgIGQoKS0+cmFuZ2VFcnJvclByb3RvdHlw
ZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBlLCAi
UmFuZ2VFcnJvciIsICJSYW5nZUVycm9yIik7Ci0gICAgZCgpLT5yZWZlcmVuY2VFcnJvclByb3Rv
dHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBl
LCAiUmVmZXJlbmNlRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiKTsKLSAgICBkKCktPnN5bnRheEVy
cm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQ
cm90b3R5cGUsICJTeW50YXhFcnJvciIsICJTeW50YXhFcnJvciIpOwotICAgIGQoKS0+dHlwZUVy
cm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQ
cm90b3R5cGUsICJUeXBlRXJyb3IiLCAiVHlwZUVycm9yIik7Ci0gICAgZCgpLT5VUklFcnJvclBy
b3RvdHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90
eXBlLCAiVVJJRXJyb3IiLCAiVVJJRXJyb3IiKTsKKyAgICBkKCktPmFycmF5UHJvdG90eXBlID0g
bmV3IChleGVjKSBBcnJheVByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSk7Cisg
ICAgZCgpLT5zdHJpbmdQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIFN0cmluZ1Byb3RvdHlwZShleGVj
LCBkKCktPm9iamVjdFByb3RvdHlwZSk7CisgICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0gbmV3
IChleGVjKSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBkKCktPm51bWJlclByb3RvdHlwZSA9IG5ldyAoZXhl
YykgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKTsKKyAgICBkKCktPmRhdGVQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIERhdGVQ
cm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUpOworICAgIGQoKS0+cmVnRXhwUHJv
dG90eXBlID0gbmV3IChleGVjKSBSZWdFeHBQcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90
b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+ZXJyb3JQcm90b3R5cGUg
PSBuZXcgKGV4ZWMpIEVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICAKKyAgICBkKCktPmV2YWxFcnJvclByb3RvdHlw
ZSA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgZCgpLT5lcnJvclByb3Rv
dHlwZSwgIkV2YWxFcnJvciIsICJFdmFsRXJyb3IiKTsKKyAgICBkKCktPnJhbmdlRXJyb3JQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQ
cm90b3R5cGUsICJSYW5nZUVycm9yIiwgIlJhbmdlRXJyb3IiKTsKKyAgICBkKCktPnJlZmVyZW5j
ZUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBk
KCktPmVycm9yUHJvdG90eXBlLCAiUmVmZXJlbmNlRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiKTsK
KyAgICBkKCktPnN5bnRheEVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJvclBy
b3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBlLCAiU3ludGF4RXJyb3IiLCAiU3ludGF4
RXJyb3IiKTsKKyAgICBkKCktPnR5cGVFcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgTmF0aXZl
RXJyb3JQcm90b3R5cGUoZXhlYywgZCgpLT5lcnJvclByb3RvdHlwZSwgIlR5cGVFcnJvciIsICJU
eXBlRXJyb3IiKTsKKyAgICBkKCktPlVSSUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRp
dmVFcnJvclByb3RvdHlwZShleGVjLCBkKCktPmVycm9yUHJvdG90eXBlLCAiVVJJRXJyb3IiLCAi
VVJJRXJyb3IiKTsKIAogICAgIC8vIENvbnN0cnVjdG9ycwotICAgIGQoKS0+b2JqZWN0Q29uc3Ry
dWN0b3IgPSBuZXcgT2JqZWN0T2JqZWN0SW1wKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmZ1bmN0aW9uQ29uc3RydWN0b3IgPSBu
ZXcgRnVuY3Rpb25PYmplY3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAg
ZCgpLT5hcnJheUNvbnN0cnVjdG9yID0gbmV3IEFycmF5T2JqZWN0SW1wKGV4ZWMsIGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUsIGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIGQoKS0+c3RyaW5nQ29u
c3RydWN0b3IgPSBuZXcgU3RyaW5nT2JqZWN0SW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUsIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKLSAgICBkKCktPmJvb2xlYW5Db25zdHJ1Y3RvciA9
IG5ldyBCb29sZWFuT2JqZWN0SW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+
Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgZCgpLT5udW1iZXJDb25zdHJ1Y3RvciA9IG5ldyBOdW1i
ZXJPYmplY3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5udW1iZXJQcm90
b3R5cGUpOwotICAgIGQoKS0+ZGF0ZUNvbnN0cnVjdG9yID0gbmV3IERhdGVPYmplY3RJbXAoZXhl
YywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5kYXRlUHJvdG90eXBlKTsKLSAgICBkKCkt
PnJlZ0V4cENvbnN0cnVjdG9yID0gbmV3IFJlZ0V4cE9iamVjdEltcChleGVjLCBkKCktPmZ1bmN0
aW9uUHJvdG90eXBlLCBkKCktPnJlZ0V4cFByb3RvdHlwZSk7Ci0gICAgZCgpLT5lcnJvckNvbnN0
cnVjdG9yID0gbmV3IEVycm9yT2JqZWN0SW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUs
IGQoKS0+ZXJyb3JQcm90b3R5cGUpOwotICAgIAotICAgIGQoKS0+ZXZhbEVycm9yQ29uc3RydWN0
b3IgPSBuZXcgTmF0aXZlRXJyb3JJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgp
LT5ldmFsRXJyb3JQcm90b3R5cGUpOwotICAgIGQoKS0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yID0g
bmV3IE5hdGl2ZUVycm9ySW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+cmFu
Z2VFcnJvclByb3RvdHlwZSk7Ci0gICAgZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yID0g
bmV3IE5hdGl2ZUVycm9ySW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+cmVm
ZXJlbmNlRXJyb3JQcm90b3R5cGUpOwotICAgIGQoKS0+c3ludGF4RXJyb3JDb25zdHJ1Y3RvciA9
IG5ldyBOYXRpdmVFcnJvckltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPnN5
bnRheEVycm9yUHJvdG90eXBlKTsKLSAgICBkKCktPnR5cGVFcnJvckNvbnN0cnVjdG9yID0gbmV3
IE5hdGl2ZUVycm9ySW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+dHlwZUVy
cm9yUHJvdG90eXBlKTsKLSAgICBkKCktPlVSSUVycm9yQ29uc3RydWN0b3IgPSBuZXcgTmF0aXZl
RXJyb3JJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5VUklFcnJvclByb3Rv
dHlwZSk7CisgICAgZCgpLT5vYmplY3RDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0T2Jq
ZWN0SW1wKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
KTsKKyAgICBkKCktPmZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uT2Jq
ZWN0SW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+YXJyYXlDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlPYmplY3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSwgZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgZCgpLT5zdHJpbmdDb25zdHJ1Y3Rv
ciA9IG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0SW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUsIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKKyAgICBkKCktPmJvb2xlYW5Db25zdHJ1Y3RvciA9
IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdEltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
LCBkKCktPmJvb2xlYW5Qcm90b3R5cGUpOworICAgIGQoKS0+bnVtYmVyQ29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIE51bWJlck9iamVjdEltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBk
KCktPm51bWJlclByb3RvdHlwZSk7CisgICAgZCgpLT5kYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIERhdGVPYmplY3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5kYXRl
UHJvdG90eXBlKTsKKyAgICBkKCktPnJlZ0V4cENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBSZWdF
eHBPYmplY3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5yZWdFeHBQcm90
b3R5cGUpOworICAgIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRXJyb3JPYmpl
Y3RJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5lcnJvclByb3RvdHlwZSk7
CisgICAgCisgICAgZCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZl
RXJyb3JJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5ldmFsRXJyb3JQcm90
b3R5cGUpOworICAgIGQoKS0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOYXRp
dmVFcnJvckltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPnJhbmdlRXJyb3JQ
cm90b3R5cGUpOworICAgIGQoKS0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhl
YykgTmF0aXZlRXJyb3JJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5yZWZl
cmVuY2VFcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5zeW50YXhFcnJvckNvbnN0cnVjdG9yID0g
bmV3IChleGVjKSBOYXRpdmVFcnJvckltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBk
KCktPnN5bnRheEVycm9yUHJvdG90eXBlKTsKKyAgICBkKCktPnR5cGVFcnJvckNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
LCBkKCktPnR5cGVFcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5VUklFcnJvckNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
LCBkKCktPlVSSUVycm9yUHJvdG90eXBlKTsKICAgICAKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPmZ1
bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKIApAQCAtMzkwLDE1ICs0MDIsMTUgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgLy8gU2V0IGdsb2Jh
bCB2YWx1ZXMuCiAgICAgSWRlbnRpZmllciBtYXRoSWRlbnQgPSAiTWF0aCI7Ci0gICAgSlNWYWx1
ZSogbWF0aE9iamVjdCA9IG5ldyBNYXRoT2JqZWN0SW1wKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90
eXBlKTsKKyAgICBKU1ZhbHVlKiBtYXRoT2JqZWN0ID0gbmV3IChleGVjKSBNYXRoT2JqZWN0SW1w
KGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKICAgICBzeW1ib2xUYWJsZUluc2VydChtYXRo
SWRlbnQsIG1hdGhPYmplY3QsIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgCiAgICAgSWRl
bnRpZmllciBuYW5JZGVudCA9ICJOYU4iOwotICAgIEpTVmFsdWUqIG5hblZhbHVlID0ganNOYU4o
KTsKKyAgICBKU1ZhbHVlKiBuYW5WYWx1ZSA9IGpzTmFOKGV4ZWMpOwogICAgIHN5bWJvbFRhYmxl
SW5zZXJ0KG5hbklkZW50LCBuYW5WYWx1ZSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAK
ICAgICBJZGVudGlmaWVyIGluZmluaXR5SWRlbnQgPSAiSW5maW5pdHkiOwotICAgIEpTVmFsdWUq
IGluZmluaXR5VmFsdWUgPSBqc051bWJlcihJbmYpOworICAgIEpTVmFsdWUqIGluZmluaXR5VmFs
dWUgPSBqc051bWJlcihleGVjLCBJbmYpOwogICAgIHN5bWJvbFRhYmxlSW5zZXJ0KGluZmluaXR5
SWRlbnQsIGluZmluaXR5VmFsdWUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgCiAgICAg
SWRlbnRpZmllciB1bmRlZmluZWRJZGVudCA9ICJ1bmRlZmluZWQiOwpAQCAtNDA3LDIwICs0MTks
MjAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgLy8g
U2V0IGdsb2JhbCBmdW5jdGlvbnMuCiAKLSAgICBkKCktPmV2YWxGdW5jdGlvbiA9IG5ldyBQcm90
b3R5cGVSZWZsZXhpdmVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwsIHRoaXMpOworICAgIGQo
KS0+ZXZhbEZ1bmN0aW9uID0gbmV3IChleGVjKSBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbihl
eGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZh
bCwgZ2xvYmFsRnVuY0V2YWwsIHRoaXMpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGQoKS0+ZXZh
bEZ1bmN0aW9uLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlw
ZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDIsICJwYXJzZUludCIsIGds
b2JhbEZ1bmNQYXJzZUludCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgInBhcnNl
RmxvYXQiLCBnbG9iYWxGdW5jUGFyc2VGbG9hdCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlw
ZSwgMSwgImlzTmFOIiwgZ2xvYmFsRnVuY0lzTmFOKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLCAxLCAiaXNGaW5pdGUiLCBnbG9iYWxGdW5jSXNGaW5pdGUpLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rp
b25Qcm90b3R5cGUsIDEsICJlc2NhcGUiLCBnbG9iYWxGdW5jRXNjYXBlKSwgRG9udEVudW0pOwot
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1
bmN0aW9uUHJvdG90eXBlLCAxLCAidW5lc2NhcGUiLCBnbG9iYWxGdW5jVW5lc2NhcGUpLCBEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJkZWNvZGVVUkkiLCBnbG9iYWxGdW5jRGVjb2Rl
VVJJKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiZGVjb2RlVVJJQ29tcG9uZW50
IiwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgMSwgImVuY29kZVVSSSIsIGdsb2JhbEZ1bmNFbmNvZGVVUkkpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUsIDEsICJlbmNvZGVVUklDb21wb25lbnQiLCBnbG9iYWxGdW5jRW5jb2Rl
VVJJQ29tcG9uZW50KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMiwgInBh
cnNlSW50IiwgZ2xvYmFsRnVuY1BhcnNlSW50KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSwgMSwgInBhcnNlRmxvYXQiLCBnbG9iYWxGdW5jUGFyc2VGbG9hdCksIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJpc05hTiIsIGdsb2JhbEZ1bmNJc05hTiks
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJpc0Zpbml0ZSIsIGdsb2Jh
bEZ1bmNJc0Zpbml0ZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGV4
ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJl
c2NhcGUiLCBnbG9iYWxGdW5jRXNjYXBlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgMSwgInVuZXNjYXBlIiwgZ2xvYmFsRnVuY1VuZXNjYXBlKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgp
LT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImRlY29kZVVSSSIsIGdsb2JhbEZ1bmNEZWNvZGVVUkkp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiZGVjb2RlVVJJQ29tcG9u
ZW50IiwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCksIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUsIDEsICJlbmNvZGVVUkkiLCBnbG9iYWxGdW5jRW5jb2RlVVJJKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImVuY29kZVVSSUNvbXBvbmVudCIs
IGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpLCBEb250RW51bSk7CiAjaWZuZGVmIE5ERUJV
RwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAia2pzcHJpbnQiLCBnbG9iYWxGdW5jS0pTUHJpbnQpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAia2pzcHJpbnQiLCBnbG9iYWxG
dW5jS0pTUHJpbnQpLCBEb250RW51bSk7CiAjZW5kaWYKIAogICAgIC8vIFNldCBwcm90b3R5cGUs
IGFuZCBhbHNvIGluc2VydCB0aGUgb2JqZWN0IHByb3RvdHlwZSBhdCB0aGUgZW5kIG9mIHRoZSBj
aGFpbi4KQEAgLTU1MSw3ICs1NjMsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0
aXZhdGlvbihFCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChleGVjLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAgQWN0aXZhdGlvbkltcCogbmV3QWN0aXZhdGlvbiA9IG5l
dyBBY3RpdmF0aW9uSW1wKCpvbGRBY3RpdmF0aW9uLT5kKCksIGxlYXZlUmVsaWMpOworICAgIEFj
dGl2YXRpb25JbXAqIG5ld0FjdGl2YXRpb24gPSBuZXcgKGV4ZWMpIEFjdGl2YXRpb25JbXAoKm9s
ZEFjdGl2YXRpb24tPmQoKSwgbGVhdmVSZWxpYyk7CiAgICAgCiAgICAgaWYgKCFsZWF2ZVJlbGlj
KSB7CiAgICAgICAgIGNoZWNrQWN0aXZhdGlvbkNvdW50KCk7CkBAIC01NzEsNSArNTgzLDkgQEAg
Ym9vbCBKU0dsb2JhbE9iamVjdDo6aXNEeW5hbWljU2NvcGUoKSBjbwogICAgIHJldHVybiB0cnVl
OwogfQogCit2b2lkKiBKU0dsb2JhbE9iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBIZWFwOjp0aHJlYWRIZWFwKCktPmFsbG9jYXRlKHNpemUpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYsOCArMTY2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUq
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpOwogCi0gICAgICAgIC8vIExpbmtlZCBsaXN0IG9mIGFsbCBnbG9iYWwgb2JqZWN0
cy4KLSAgICAgICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBoZWFkKCkgeyByZXR1cm4gc19oZWFk
OyB9CisgICAgICAgIC8vIFBlci10aHJlYWQgbGlua2VkIGxpc3Qgb2YgYWxsIGdsb2JhbCBvYmpl
Y3RzLgorICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqJiBoZWFkKCk7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBuZXh0KCkgeyByZXR1cm4gZCgpLT5uZXh0OyB9CiAKICAgICAgICAgLy8g
UmVzZXRzIHRoZSBnbG9iYWwgb2JqZWN0IHRvIGNvbnRhaW4gb25seSBidWlsdC1pbiBwcm9wZXJ0
aWVzLCBzZXRzCkBAIC0yNTUsNiArMjU1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIC8v
IEluaXRpYWxpemUgYW5kL29yIHJldHJpZXZlIHBlci10aHJlYWQgaGFzaCB0YWJsZXMgLSB1c2Ug
cGVyVGhyZWFkRGF0YSgpIGZvciBmYXN0ZXIgYWNjZXNzIGluc3RlYWQuCiAgICAgICAgIHN0YXRp
YyBUaHJlYWRDbGFzc0luZm9IYXNoVGFibGVzKiB0aHJlYWRDbGFzc0luZm9IYXNoVGFibGVzKCk7
CiAKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7CisKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGluaXQoSlNPYmplY3QqIHRoaXNWYWx1ZSk7CiAgICAgICAgIApAQCAtMjY1
LDggKzI2Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZvaWQgZGVsZXRlQWN0aXZh
dGlvblN0YWNrKCk7CiAgICAgICAgIHZvaWQgY2hlY2tBY3RpdmF0aW9uQ291bnQoKTsKLQotICAg
ICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIHNfaGVhZDsKICAgICB9OwogCiAgICAgaW5saW5l
IGJvb2wgSlNHbG9iYWxPYmplY3Q6OnRpbWVkT3V0KCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0xvY2suY3Bw
CShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0xvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCwxMSArODAsNiBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soCiAgICAgcmV0dXJuICEhcHRocmVhZF9nZXRzcGVjaWZpYyhkaWRMb2NrSlNN
dXRleCk7CiB9CiAKLXZvaWQgSlNMb2NrOjpyZWdpc3RlclRocmVhZCgpCi17Ci0gICAgQ29sbGVj
dG9yOjpyZWdpc3RlclRocmVhZCgpOwotfQotCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKCkKICAgICA6IG1fbG9ja0NvdW50KDApCiB7CkBAIC0xMjEsMTAgKzExNiw2IEBAIHZv
aWQgSlNMb2NrOjp1bmxvY2soKQogewogfQogCi12b2lkIEpTTG9jazo6cmVnaXN0ZXJUaHJlYWQo
KQotewotfQotCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKCkKIHsKIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvSlNMb2NrLmgJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0pTTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICBKU0xvY2soKQogICAgICAgICB7CiAgICAgICAgICAgICBsb2NrKCk7Ci0gICAg
ICAgICAgICByZWdpc3RlclRocmVhZCgpOwogICAgICAgICB9CiAKICAgICAgICAgfkpTTG9jaygp
IApAQCAtNjQsOCArNjMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIGludCBs
b2NrQ291bnQoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlclRocmVhZCgpOwotCiAgICAgICAg
IGNsYXNzIERyb3BBbGxMb2NrcyA6IE5vbmNvcHlhYmxlIHsKICAgICAgICAgcHVibGljOgogICAg
ICAgICAgICAgRHJvcEFsbExvY2tzKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlf
aW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0
YW5jZS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBBcnJheUluc3RhbmNl
OjpBcnJheUluc3RhbmNlKEpTT2JqZWN0KiBwCiAgICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFs
Q2FwYWNpdHk7CiAgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4oZmFz
dFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7CiAKLSAgICBDb2xs
ZWN0b3I6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChpbml0aWFsQ2FwYWNpdHkgKiBzaXplb2YoSlNW
YWx1ZSopKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoaW5p
dGlhbENhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUqKSk7CiB9CiAKIEFycmF5SW5zdGFuY2U6OkFy
cmF5SW5zdGFuY2UoSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgTGlzdCYgbGlzdCkKQEAgLTEy
OCw5ICsxMjgsOSBAQCBKU1ZhbHVlKiBBcnJheUluc3RhbmNlOjpnZXRJdGVtKHVuc2lnbmVkCiAg
ICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBB
cnJheUluc3RhbmNlOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogQXJyYXlJbnN0
YW5jZTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBqc051bWJl
cihzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlKj4oc2xvdC5zbG90QmFzZSgpKS0+bV9sZW5ndGgp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlKj4o
c2xvdC5zbG90QmFzZSgpKS0+bV9sZW5ndGgpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgQXJy
YXlJbnN0YW5jZTo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Fy
cmF5X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29i
amVjdC5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdAogICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAhZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5hcnJheVZpc2l0ZWRFbGVtZW50cygpLmFkZCh0aGlz
T2JqKS5zZWNvbmQ7CiAgICAgVmVjdG9yPFVDaGFyLCAyNTY+IHN0ckJ1ZmZlcjsKICAgICBpZiAo
YWxyZWFkeVZpc2l0ZWQpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nKDAsIDApKTsg
Ly8gcmV0dXJuIGFuIGVtcHR5IHN0cmluZywgYXZvZGluZyBpbmZpbml0ZSByZWN1cnNpb24uCisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKDAsIDApKTsgLy8gcmV0dXJuIGFu
IGVtcHR5IHN0cmluZywgYXZvZGluZyBpbmZpbml0ZSByZWN1cnNpb24uCiAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7
IGsrKykgewpAQCAtMTIzLDcgKzEyMyw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXQKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmFycmF5VmlzaXRlZEVsZW1lbnRzKCkucmVtb3ZlKHRoaXNPYmopOwot
ICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nKHN0ckJ1ZmZlci5kYXRhKCksIHN0ckJ1ZmZlci5k
YXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBVU3RyaW5nKHN0ckJ1ZmZlci5kYXRhKCksIHN0ckJ1ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIu
c2l6ZSgpIDogMCkpOwogfQogCiBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAtMTM0
LDcgKzEzNCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXgKICAg
ICBib29sIGFscmVhZHlWaXNpdGVkID0gIWV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+YXJy
YXlWaXNpdGVkRWxlbWVudHMoKS5hZGQodGhpc09iaikuc2Vjb25kOwogICAgIFZlY3RvcjxVQ2hh
ciwgMjU2PiBzdHJCdWZmZXI7CiAgICAgaWYgKGFscmVhZHlWaXNpdGVkKQotICAgICAgICByZXR1
cm4ganNTdHJpbmcoVVN0cmluZygwLCAwKSk7IC8vIHJldHVybiBhbiBlbXB0eSBzdHJpbmcsIGF2
b2RpbmcgaW5maW5pdGUgcmVjdXJzaW9uLgorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
VVN0cmluZygwLCAwKSk7IC8vIHJldHVybiBhbiBlbXB0eSBzdHJpbmcsIGF2b2RpbmcgaW5maW5p
dGUgcmVjdXJzaW9uLgogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKQEAgLTE2OCw3ICsxNjgsNyBAQCBK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4CiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5hcnJheVZpc2l0ZWRF
bGVtZW50cygpLnJlbW92ZSh0aGlzT2JqKTsKLSAgICByZXR1cm4ganNTdHJpbmcoVVN0cmluZyhz
dHJCdWZmZXIuZGF0YSgpLCBzdHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDAp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJCdWZmZXIuZGF0YSgpLCBz
dHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDApKTsKIH0KIAogSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC0xNzYsNyArMTc2LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1
bmNKb2luKEV4ZWNTdGF0ZSogZQogICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAhZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLT5hcnJheVZpc2l0ZWRFbGVtZW50cygpLmFkZCh0aGlzT2JqKS5z
ZWNvbmQ7CiAgICAgVmVjdG9yPFVDaGFyLCAyNTY+IHN0ckJ1ZmZlcjsKICAgICBpZiAoYWxyZWFk
eVZpc2l0ZWQpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nKDAsIDApKTsgLy8gcmV0
dXJuIGFuIGVtcHR5IHN0cmluZywgYXZvZGluZyBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKDAsIDApKTsgLy8gcmV0dXJuIGFuIGVtcHR5
IHN0cmluZywgYXZvZGluZyBpbmZpbml0ZSByZWN1cnNpb24uCiAKICAgICBVQ2hhciBjb21tYSA9
ICcsJzsKICAgICBVU3RyaW5nIHNlcGFyYXRvciA9IGFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkgPyBV
U3RyaW5nKCZjb21tYSwgMSkgOiBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKQEAgLTIwNyw3ICsy
MDcsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBlCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5hcnJh
eVZpc2l0ZWRFbGVtZW50cygpLnJlbW92ZSh0aGlzT2JqKTsKLSAgICByZXR1cm4ganNTdHJpbmco
VVN0cmluZyhzdHJCdWZmZXIuZGF0YSgpLCBzdHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNp
emUoKSA6IDApKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJCdWZmZXIu
ZGF0YSgpLCBzdHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDApKTsKIH0KIAog
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKQEAgLTI0MCw3ICsyNDAsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqCiAgICAgICAgIGN1ck9iaiA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4oY3VyQXJnKTsgLy8gbWF5IGJlIDAKICAgICAgICAgKytpdDsKICAgICB9
Ci0gICAgYXJyLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIobikpOworICAgIGFyci0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKGV4ZWMsIG4pKTsKICAgICByZXR1cm4gYXJyOwogfQogCkBAIC0yNDksMTIgKzI0
OSwxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1BvcChFeGVjU3RhdGUqIGV4CiAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGlm
IChsZW5ndGggPT0gMCkgewotICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgICAgIHRoaXNPYmotPnB1
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCBsZW5n
dGgpKTsKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgbGVuZ3RoIC0gMSk7CiAgICAgICAgIHRo
aXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICB0aGlzT2Jq
LT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3Ro
IC0gMSkpOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoIC0gMSkpOwogICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMjY1LDggKzI2NSw4IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVz
aChFeGVjU3RhdGUqIGUKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgYXJncy5zaXplKCk7
IG4rKykKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0aCArIG4sIGFyZ3Nbbl0pOwog
ICAgIGxlbmd0aCArPSBhcmdzLnNpemUoKTsKLSAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7Ci0gICAgcmV0dXJuIGpz
TnVtYmVyKGxlbmd0aCk7CisgICAgdGhpc09iai0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCkpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBsZW5ndGgpOwogfQogCiBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC0yOTgsNyAr
Mjk4LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIAogCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBpZiAobGVuZ3RoID09IDApIHsKLSAgICAg
ICAgdGhpc09iai0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKGxlbmd0aCkpOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSk7CiAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIDApOwpAQCAtMzA5LDcgKzMwOSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
U2hpZnQoRXhlY1N0YXRlKiAKICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0
eShleGVjLCBrIC0gMSk7CiAgICAgICAgIH0KICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVy
dHkoZXhlYywgbGVuZ3RoIC0gMSk7Ci0gICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW5ndGggLSAxKSk7CisgICAgICAgIHRo
aXNPYmotPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihl
eGVjLCBsZW5ndGggLSAxKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNTMs
NyArMzUzLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIAogICAg
ICAgICBpZiAoSlNWYWx1ZSogdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQogICAg
ICAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgbiwgdik7CiAgICAgfQotICAgIHJlc09iai0+cHV0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKG4pKTsKKyAgICBy
ZXNPYmotPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihl
eGVjLCBuKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDM4LDcgKzQzOCw3IEBAIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKEpTVmFs
dWUqIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pKQogICAgICAgICAg
ICAgcmVzT2JqLT5wdXQoZXhlYywgaywgdik7CiAgICAgfQotICAgIHJlc09iai0+cHV0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGRlbGV0ZUNvdW50KSk7Cisg
ICAgcmVzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoZXhlYywgZGVsZXRlQ291bnQpKTsKIAogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0g
c3RkOjptYXg8aW50PihhcmdzLnNpemUoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJn
cyAhPSBkZWxldGVDb3VudCkgewpAQCAtNDYzLDcgKzQ2Myw3IEBAIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYWRk
aXRpb25hbEFyZ3M7ICsraykKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgKyBiZWdpbiwg
YXJnc1trICsgMl0pOwogCi0gICAgdGhpc09iai0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0aCAtIGRlbGV0ZUNvdW50ICsgYWRkaXRpb25hbEFy
Z3MpKTsKKyAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoIC0gZGVsZXRlQ291bnQgKyBhZGRpdGlvbmFsQXJncykp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlCiAgICAgfQogICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBuckFyZ3M7ICsraykKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGssIGFy
Z3Nba10pOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGxlbmd0aCArIG5yQXJncyk7
CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgbGVuZ3RoICsgbnJBcmdzKTsK
ICAgICB0aGlzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgcmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTEwLDcgKzUxMCw3IEBAIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSoKICAgICAgICAgTGlzdCBlYWNoQXJndW1l
bnRzOwogCiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHYpOwotICAgICAgICBlYWNoQXJn
dW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5k
KGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09i
aik7CiAKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gZWFjaEZ1bmN0aW9uLT5jYWxsKGV4ZWMs
IGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CkBAIC01MzIsNyArNTMyLDcgQEAgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRo
aXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIo
ZXhlYyk7CiAKICAgICBMaXN0IG1hcEFyZ3M7Ci0gICAgbWFwQXJncy5hcHBlbmQoanNOdW1iZXIo
bGVuZ3RoKSk7CisgICAgbWFwQXJncy5hcHBlbmQoanNOdW1iZXIoZXhlYywgbGVuZ3RoKSk7CiAg
ICAgSlNPYmplY3QqIHJlc3VsdEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMs
IG1hcEFyZ3MpKTsKIAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTU0NSw3ICs1NDUsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4CiAgICAgICAgIExpc3QgZWFjaEFyZ3VtZW50
czsKIAogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh2KTsKLSAgICAgICAgZWFjaEFyZ3Vt
ZW50cy5hcHBlbmQoanNOdW1iZXIoaykpOworICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChq
c051bWJlcihleGVjLCBrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmop
OwogCiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGVhY2hGdW5jdGlvbi0+Y2FsbChleGVjLCBh
cHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwpAQCAtNTgxLDcgKzU4MSw3IEBAIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiAKICAgICAgICAgTGlzdCBlYWNoQXJndW1lbnRz
OwogCiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhp
c09iaiwgaykpOwotICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7Cisg
ICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAg
ZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKICAgICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGwoZXhlYywgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRz
KS0+dG9Cb29sZWFuKGV4ZWMpOwpAQCAtNjEyLDcgKzYxMiw3IEBAIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jRm9yRWFjaChFeGVjU3RhdGUKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVudHM7CiAg
ICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwg
aykpOwotICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CisgICAgICAg
IGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAgZWFjaEFy
Z3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKICAgICAgICAgZWFjaEZ1bmN0aW9uLT5jYWxsKGV4
ZWMsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CkBAIC02MzksNyArNjM5LDcgQEAgSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZQogCiAgICAgICAgIExpc3QgZWFjaEFy
Z3VtZW50czsKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVj
LCB0aGlzT2JqLCBrKSk7Ci0gICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGsp
KTsKKyAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAg
ICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAogICAgICAgICBib29sIHByZWRp
Y2F0ZVJlc3VsdCA9IGVhY2hGdW5jdGlvbi0+Y2FsbChleGVjLCBhcHBseVRoaXMsIGVhY2hBcmd1
bWVudHMpLT50b0Jvb2xlYW4oZXhlYyk7CkBAIC02NzUsMTAgKzY3NSwxMCBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlCiAgICAgICAgIGlmICghZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVu
dCwgZSkpCi0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOworICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGluZGV4KTsKICAgICB9CiAKLSAgICByZXR1cm4ganNOdW1i
ZXIoLTEpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCAtMSk7CiB9CiAKIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKQEAgLTY5Myw3ICs2OTMsNyBAQCBKU1ZhbHVlKiBhcnJheVBy
b3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTCiAgICAgaWYgKGQgPCAwKSB7CiAgICAgICAgIGQgKz0g
bGVuZ3RoOwogICAgICAgICBpZiAoZCA8IDApCi0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
LTEpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIC0xKTsKICAgICB9CiAgICAg
aWYgKGQgPCBsZW5ndGgpCiAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKQEAg
LTcwNCwxMCArNzA0LDEwIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhl
Y1MKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChz
dHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKLSAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihpbmRleCk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5kZXgp
OwogICAgIH0KIAotICAgIHJldHVybiBqc051bWJlcigtMSk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIC0xKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5
T2JqZWN0SW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcxOSw3ICs3MTks
NyBAQCBBcnJheU9iamVjdEltcDo6QXJyYXlPYmplY3RJbXAoRXhlY1N0YXRlCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG8sIERvbnRFbnVt
fERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29u
c3RydWN0b3IKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8
RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKIGJvb2wgQXJyYXlPYmplY3RJbXA6OmltcGxlbWVu
dHNDb25zdHJ1Y3QoKSBjb25zdApAQCAtNzM1LDExICs3MzUsMTEgQEAgSlNPYmplY3QqIEFycmF5
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlYwogICAgICAgICB1aW50MzJfdCBuID0gYXJnc1swXS0+
dG9VSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChuICE9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMp
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgIkFycmF5
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIik7Ci0gICAgICAg
IHJldHVybiBuZXcgQXJyYXlJbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFy
cmF5UHJvdG90eXBlKCksIG4pOworICAgICAgICByZXR1cm4gbmV3IChleGVjKSBBcnJheUluc3Rh
bmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgbik7CiAg
ICAgfQogCiAgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcnJheSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRo
ZSBhcmd1bWVudHMgaW4gaXQKLSAgICByZXR1cm4gbmV3IEFycmF5SW5zdGFuY2UoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpLCBhcmdzKTsKKyAgICByZXR1cm4g
bmV3IChleGVjKSBBcnJheUluc3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJy
YXlQcm90b3R5cGUoKSwgYXJncyk7CiB9CiAKIC8vIEVDTUEgMTUuNi4xCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9ib29sX29iamVjdC5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2Jvb2xfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBCb29s
ZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTCiB7CiAgICAgc2V0SW50ZXJuYWxW
YWx1ZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvU3RyaW5nLCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9u
UHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgYm9vbGVhblByb3Rv
RnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvU3RyaW5nLCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2Ys
IGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKSwgRG9udEVudW0pOwogfQogCiAKQEAgLTY3LDcgKzY3
LDcgQEAgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdAogICAgIEpTVmFs
dWUqIHYgPSBzdGF0aWNfY2FzdDxCb29sZWFuSW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxW
YWx1ZSgpOwogICAgIEFTU0VSVCh2KTsKIAotICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmlu
ZyhleGVjKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHYtPnRvU3RyaW5nKGV4ZWMpKTsK
IH0KIEpTVmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewpAQCAtOTAsNyArOTAsNyBAQCBCb29sZWFu
T2JqZWN0SW1wOjpCb29sZWFuT2JqZWN0SW1wKEV4ZWNTCiAgICAgcHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGJvb2xlYW5Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKIAogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0
cnVjdG9yCi0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIGJvb2wgQm9vbGVhbk9iamVjdEltcDo6
aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0CkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBCb29s
ZWFuT2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydQogLy8gRUNNQSAxNS42LjIKIEpTT2JqZWN0
KiBCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0
JiBhcmdzKQogewotICAgIEJvb2xlYW5JbnN0YW5jZSogb2JqKG5ldyBCb29sZWFuSW5zdGFuY2Uo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ib29sZWFuUHJvdG90eXBlKCkpKTsKKyAgICBC
b29sZWFuSW5zdGFuY2UqIG9iaihuZXcgKGV4ZWMpIEJvb2xlYW5JbnN0YW5jZShleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKSkpOwogICAgIG9iai0+c2V0SW50
ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpKSk7CiAgICAgcmV0
dXJuIG9iajsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAzMjc1
NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKICNpbmNsdWRlIDxw
dGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKERBUldJTikKQEAgLTc0LDI1ICs3NSwzNSBAQAogI2RlZmluZSBDT0xMRUNUX09O
X0VWRVJZX0FMTE9DQVRJT04gMAogCiB1c2luZyBzdGQ6Om1heDsKK3VzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKIG5hbWVzcGFjZSBLSlMgewogCiAvLyB0dW5hYmxlIHBhcmFtZXRlcnMKIAotY29uc3Qg
c2l6ZV90IFNQQVJFX0VNUFRZX0JMT0NLUyA9IDI7Ci1jb25zdCBzaXplX3QgTUlOX0FSUkFZX1NJ
WkUgPSAxNDsKLWNvbnN0IHNpemVfdCBHUk9XVEhfRkFDVE9SID0gMjsKLWNvbnN0IHNpemVfdCBM
T1dfV0FURVJfRkFDVE9SID0gNDsKLWNvbnN0IHNpemVfdCBBTExPQ0FUSU9OU19QRVJfQ09MTEVD
VElPTiA9IDQwMDA7Ci0KLXN0YXRpYyBDb2xsZWN0b3JIZWFwIHByaW1hcnlIZWFwID0geyAwLCAw
LCAwLCAwLCAwLCAwLCAwLCBOb09wZXJhdGlvbiB9Owotc3RhdGljIENvbGxlY3RvckhlYXAgbnVt
YmVySGVhcCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgTm9PcGVyYXRpb24gfTsKLQotLy8gRklY
TUU6IEkgZG9uJ3QgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBhIHN0YXRpYyBkYXRhIG1lbWJlciBv
ZiB0aGUgQ29sbGVjdG9yIGNsYXNzLgotLy8gSnVzdCBhIHByaXZhdGUgZ2xvYmFsIGxpa2UgImhl
YXAiIGFib3ZlIHdvdWxkIGJlIGZpbmUuCi1zaXplX3QgQ29sbGVjdG9yOjptYWluVGhyZWFkT25s
eU9iamVjdENvdW50ID0gMDsKKyNkZWZpbmUgU1BBUkVfRU1QVFlfQkxPQ0tTIDJVTAorI2RlZmlu
ZSBNSU5fQVJSQVlfU0laRSAxNFVMCisjZGVmaW5lIEdST1dUSF9GQUNUT1IgMlVMCisjZGVmaW5l
IExPV19XQVRFUl9GQUNUT1IgNFVMCisjZGVmaW5lIEFMTE9DQVRJT05TX1BFUl9DT0xMRUNUSU9O
IDQwMDBVTAogCi1zdGF0aWMgQ29sbGVjdG9yQmxvY2sqIGFsbG9jYXRlQmxvY2soKQorSGVhcDo6
SGVhcCgpCit7CisgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZihIZWFwKSk7Cit9CisKK0hlYXAq
IEhlYXA6OnRocmVhZEhlYXAoKQoreworI2lmIFVTRShNVUxUSVBMRV9USFJFQURTKQorICAgIHN0
YXRpYyBUaHJlYWRTcGVjaWZpYzxIZWFwPiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hh
cmVkSW5zdGFuY2U7CisjZWxzZQorICAgIHN0YXRpYyBIZWFwIHNoYXJlZEluc3RhbmNlOworICAg
IHJldHVybiAmc2hhcmVkSW5zdGFuY2U7CisjZW5kaWYKK30KKworc3RhdGljIE5FVkVSX0lOTElO
RSBDb2xsZWN0b3JCbG9jayogYWxsb2NhdGVCbG9jaygpCiB7CiAjaWYgUExBVEZPUk0oREFSV0lO
KSAgICAKICAgICB2bV9hZGRyZXNzX3QgYWRkcmVzcyA9IDA7CkBAIC0xNDQsNyArMTU1LDcgQEAg
c3RhdGljIHZvaWQgZnJlZUJsb2NrKENvbGxlY3RvckJsb2NrKiBibAogI2VuZGlmCiB9CiAKLXZv
aWQgQ29sbGVjdG9yOjpyZWNvcmRFeHRyYUNvc3Qoc2l6ZV90IGNvc3QpCit2b2lkIEhlYXA6OnJl
Y29yZEV4dHJhQ29zdChzaXplX3QgY29zdCkKIHsKICAgICAvLyBPdXIgZnJlcXVlbmN5IG9mIGdh
cmJhZ2UgY29sbGVjdGlvbiB0cmllcyB0byBiYWxhbmNlIG1lbW9yeSB1c2UgYWdhaW5zdCBzcGVl
ZAogICAgIC8vIGJ5IGNvbGxlY3RpbmcgYmFzZWQgb24gdGhlIG51bWJlciBvZiBuZXdseSBjcmVh
dGVkIHZhbHVlcy4gSG93ZXZlciwgZm9yIHZhbHVlcwpAQCAtMTYxLDkgKzE3Miw5IEBAIHZvaWQg
Q29sbGVjdG9yOjpyZWNvcmRFeHRyYUNvc3Qoc2l6ZV90IGMKICAgICBwcmltYXJ5SGVhcC5leHRy
YUNvc3QgKz0gY29zdDsKIH0KIAotdGVtcGxhdGUgPENvbGxlY3Rvcjo6SGVhcFR5cGUgaGVhcFR5
cGU+IHN0cnVjdCBIZWFwQ29uc3RhbnRzOwordGVtcGxhdGUgPEhlYXA6OkhlYXBUeXBlIGhlYXBU
eXBlPiBzdHJ1Y3QgSGVhcENvbnN0YW50czsKIAotdGVtcGxhdGUgPD4gc3RydWN0IEhlYXBDb25z
dGFudHM8Q29sbGVjdG9yOjpQcmltYXJ5SGVhcD4gewordGVtcGxhdGUgPD4gc3RydWN0IEhlYXBD
b25zdGFudHM8SGVhcDo6UHJpbWFyeUhlYXA+IHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNl
bGxTaXplID0gQ0VMTF9TSVpFOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2VsbHNQZXJCbG9j
ayA9IENFTExTX1BFUl9CTE9DSzsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJpdG1hcFNoaWZ0
ID0gMDsKQEAgLTE3MSw3ICsxODIsNyBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGVhcENvbnN0YW50
czxDb2xsZWN0CiAgICAgdHlwZWRlZiBDb2xsZWN0b3JCbG9jayBCbG9jazsKIH07CiAKLXRlbXBs
YXRlIDw+IHN0cnVjdCBIZWFwQ29uc3RhbnRzPENvbGxlY3Rvcjo6TnVtYmVySGVhcD4gewordGVt
cGxhdGUgPD4gc3RydWN0IEhlYXBDb25zdGFudHM8SGVhcDo6TnVtYmVySGVhcD4gewogICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY2VsbFNpemUgPSBTTUFMTF9DRUxMX1NJWkU7CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjZWxsc1BlckJsb2NrID0gU01BTExfQ0VMTFNfUEVSX0JMT0NLOwogICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgYml0bWFwU2hpZnQgPSAxOwpAQCAtMTc5LDcgKzE5MCw3IEBA
IHRlbXBsYXRlIDw+IHN0cnVjdCBIZWFwQ29uc3RhbnRzPENvbGxlY3QKICAgICB0eXBlZGVmIFNt
YWxsQ2VsbENvbGxlY3RvckJsb2NrIEJsb2NrOwogfTsKIAotdGVtcGxhdGUgPENvbGxlY3Rvcjo6
SGVhcFR5cGUgaGVhcFR5cGU+IHZvaWQqIENvbGxlY3Rvcjo6aGVhcEFsbG9jYXRlKHNpemVfdCBz
KQordGVtcGxhdGUgPEhlYXA6OkhlYXBUeXBlIGhlYXBUeXBlPiB2b2lkKiBIZWFwOjpoZWFwQWxs
b2NhdGUoc2l6ZV90IHMpCiB7CiAgIHR5cGVkZWYgdHlwZW5hbWUgSGVhcENvbnN0YW50czxoZWFw
VHlwZT46OkJsb2NrIEJsb2NrOwogICB0eXBlZGVmIHR5cGVuYW1lIEhlYXBDb25zdGFudHM8aGVh
cFR5cGU+OjpDZWxsIENlbGw7CkBAIC0yNjksNiArMjgwLDcgQEAgY29sbGVjdDoKIAogICAgIHRh
cmdldEJsb2NrID0gKEJsb2NrKilhbGxvY2F0ZUJsb2NrKCk7CiAgICAgdGFyZ2V0QmxvY2stPmZy
ZWVMaXN0ID0gdGFyZ2V0QmxvY2stPmNlbGxzOworICAgIHRhcmdldEJsb2NrLT5oZWFwID0gdGhp
czsKICAgICB0YXJnZXRCbG9ja1VzZWRDZWxscyA9IDA7CiAgICAgaGVhcC5ibG9ja3NbdXNlZEJs
b2Nrc10gPSAoQ29sbGVjdG9yQmxvY2sqKXRhcmdldEJsb2NrOwogICAgIGhlYXAudXNlZEJsb2Nr
cyA9IHVzZWRCbG9ja3MgKyAxOwpAQCAtMjkyLDEyICszMDQsMTIgQEAgY29sbGVjdDoKICAgcmV0
dXJuIG5ld0NlbGw7CiB9CiAKLXZvaWQqIENvbGxlY3Rvcjo6YWxsb2NhdGUoc2l6ZV90IHMpIAor
dm9pZCogSGVhcDo6YWxsb2NhdGUoc2l6ZV90IHMpIAogewogICAgIHJldHVybiBoZWFwQWxsb2Nh
dGU8UHJpbWFyeUhlYXA+KHMpOwogfQogCi12b2lkKiBDb2xsZWN0b3I6OmFsbG9jYXRlTnVtYmVy
KHNpemVfdCBzKSAKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlTnVtYmVyKHNpemVfdCBzKSAKIHsKICAg
ICByZXR1cm4gaGVhcEFsbG9jYXRlPE51bWJlckhlYXA+KHMpOwogfQpAQCAtMzU4LDEyOCArMzcw
LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogY3VycmVudFRocmVhZFN0YWNrQmEKICNlbmRpZgog
fQogCi0jaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCi1zdGF0aWMgcHRocmVhZF90IG1haW5UaHJl
YWQ7Ci0jZW5kaWYKLQotdm9pZCBDb2xsZWN0b3I6OnJlZ2lzdGVyQXNNYWluVGhyZWFkKCkKLXsK
LSNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKLSAgICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxm
KCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBib29sIG9uTWFpblRocmVhZCgpCi17Ci0j
aWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCi0jaWYgUExBVEZPUk0oREFSV0lOKQotICAgIHJldHVy
biBwdGhyZWFkX21haW5fbnAoKTsKLSNlbHNlCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChw
dGhyZWFkX3NlbGYoKSwgbWFpblRocmVhZCk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgcmV0dXJuIHRy
dWU7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShNVUxUSVBMRV9USFJFQURTKQotCi0jaWYgUExBVEZP
Uk0oREFSV0lOKQotdHlwZWRlZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIFBM
QVRGT1JNKFdJTl9PUykKLXN0cnVjdCBQbGF0Zm9ybVRocmVhZCB7Ci0gICAgUGxhdGZvcm1UaHJl
YWQoRFdPUkQgX2lkLCBIQU5ETEUgX2hhbmRsZSkgOiBpZChfaWQpLCBoYW5kbGUoX2hhbmRsZSkg
e30KLSAgICBEV09SRCBpZDsKLSAgICBIQU5ETEUgaGFuZGxlOwotfTsKLSNlbmRpZgotCi1zdGF0
aWMgaW5saW5lIFBsYXRmb3JtVGhyZWFkIGdldEN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0j
aWYgUExBVEZPUk0oREFSV0lOKQotICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0
aHJlYWRfc2VsZigpKTsKLSNlbGlmIFBMQVRGT1JNKFdJTl9PUykKLSAgICBIQU5ETEUgdGhyZWFk
SGFuZGxlID0gcHRocmVhZF9nZXR3MzJ0aHJlYWRoYW5kbGVfbnAocHRocmVhZF9zZWxmKCkpOwot
ICAgIHJldHVybiBQbGF0Zm9ybVRocmVhZChHZXRDdXJyZW50VGhyZWFkSWQoKSwgdGhyZWFkSGFu
ZGxlKTsKLSNlbmRpZgotfQotCi1jbGFzcyBDb2xsZWN0b3I6OlRocmVhZCB7Ci1wdWJsaWM6Ci0g
IFRocmVhZChwdGhyZWFkX3QgcHRocmVhZCwgY29uc3QgUGxhdGZvcm1UaHJlYWQmIHBsYXRUaHJl
YWQsIHZvaWQqIGJhc2UpIAotICA6IHBvc2l4VGhyZWFkKHB0aHJlYWQpLCBwbGF0Zm9ybVRocmVh
ZChwbGF0VGhyZWFkKSwgc3RhY2tCYXNlKGJhc2UpIHt9Ci0gIFRocmVhZCogbmV4dDsKLSAgcHRo
cmVhZF90IHBvc2l4VGhyZWFkOwotICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZDsKLSAg
dm9pZCogc3RhY2tCYXNlOwotfTsKLQotcHRocmVhZF9rZXlfdCByZWdpc3RlcmVkVGhyZWFkS2V5
OwotcHRocmVhZF9vbmNlX3QgcmVnaXN0ZXJlZFRocmVhZEtleU9uY2UgPSBQVEhSRUFEX09OQ0Vf
SU5JVDsKLUNvbGxlY3Rvcjo6VGhyZWFkKiByZWdpc3RlcmVkVGhyZWFkczsKLQotc3RhdGljIHZv
aWQgZGVzdHJveVJlZ2lzdGVyZWRUaHJlYWQodm9pZCogZGF0YSkgCi17Ci0gIENvbGxlY3Rvcjo6
VGhyZWFkKiB0aHJlYWQgPSAoQ29sbGVjdG9yOjpUaHJlYWQqKWRhdGE7Ci0KLSAgLy8gQ2FuJ3Qg
dXNlIEpTTG9jayBjb252ZW5pZW5jZSBvYmplY3QgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gcmUtcmVnaXN0ZXIKLSAgLy8gYW4gZXhpdGluZyB0aHJlYWQuCi0gIEpTTG9jazo6bG9jaygp
OwotICAKLSAgaWYgKHJlZ2lzdGVyZWRUaHJlYWRzID09IHRocmVhZCkgewotICAgIHJlZ2lzdGVy
ZWRUaHJlYWRzID0gcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7Ci0gIH0gZWxzZSB7Ci0gICAgQ29s
bGVjdG9yOjpUaHJlYWQgKmxhc3QgPSByZWdpc3RlcmVkVGhyZWFkczsKLSAgICBDb2xsZWN0b3I6
OlRocmVhZCAqdDsKLSAgICBmb3IgKHQgPSByZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdCAhPSBO
VUxMOyB0ID0gdC0+bmV4dCkgewotICAgICAgaWYgKHQgPT0gdGhyZWFkKSB7ICAgICAgICAgIAot
ICAgICAgICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0OwotICAgICAgICAgIGJyZWFrOwotICAgICAg
fQotICAgICAgbGFzdCA9IHQ7Ci0gICAgfQotICAgIEFTU0VSVCh0KTsgLy8gSWYgdCBpcyBOVUxM
LCB3ZSBuZXZlciBmb3VuZCBvdXJzZWx2ZXMgaW4gdGhlIGxpc3QuCi0gIH0KLQotICBKU0xvY2s6
OnVubG9jaygpOwotCi0gIGRlbGV0ZSB0aHJlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxp
emVSZWdpc3RlcmVkVGhyZWFkS2V5KCkKLXsKLSAgcHRocmVhZF9rZXlfY3JlYXRlKCZyZWdpc3Rl
cmVkVGhyZWFkS2V5LCBkZXN0cm95UmVnaXN0ZXJlZFRocmVhZCk7Ci19Ci0KLXZvaWQgQ29sbGVj
dG9yOjpyZWdpc3RlclRocmVhZCgpCi17Ci0gIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4g
MCk7Ci0gIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAK
LSAgcHRocmVhZF9vbmNlKCZyZWdpc3RlcmVkVGhyZWFkS2V5T25jZSwgaW5pdGlhbGl6ZVJlZ2lz
dGVyZWRUaHJlYWRLZXkpOwotCi0gIGlmICghcHRocmVhZF9nZXRzcGVjaWZpYyhyZWdpc3RlcmVk
VGhyZWFkS2V5KSkgewotI2lmIFBMQVRGT1JNKERBUldJTikKLSAgICAgIGlmIChvbk1haW5UaHJl
YWQoKSkKLSAgICAgICAgICBDb2xsZWN0b3JIZWFwSW50cm9zcGVjdG9yOjppbml0KCZwcmltYXJ5
SGVhcCwgJm51bWJlckhlYXApOwotI2VuZGlmCi0KLSAgICBDb2xsZWN0b3I6OlRocmVhZCAqdGhy
ZWFkID0gbmV3IENvbGxlY3Rvcjo6VGhyZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxh
dGZvcm1UaHJlYWQoKSwgY3VycmVudFRocmVhZFN0YWNrQmFzZSgpKTsKLQotICAgIHRocmVhZC0+
bmV4dCA9IHJlZ2lzdGVyZWRUaHJlYWRzOwotICAgIHJlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFk
OwotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMocmVnaXN0ZXJlZFRocmVhZEtleSwgdGhyZWFkKTsK
LSAgfQotfQotCi0jZW5kaWYKLQogI2RlZmluZSBJU19QT0lOVEVSX0FMSUdORUQocCkgKCgoaW50
cHRyX3QpKHApICYgKHNpemVvZihjaGFyICopIC0gMSkpID09IDApCiAKIC8vIGNlbGwgc2l6ZSBu
ZWVkcyB0byBiZSBhIHBvd2VyIG9mIHR3byBmb3IgdGhpcyB0byBiZSB2YWxpZAogI2RlZmluZSBJ
U19IQUxGX0NFTExfQUxJR05FRChwKSAoKChpbnRwdHJfdCkocCkgJiAoQ0VMTF9NQVNLID4+IDEp
KSA9PSAwKQogCi12b2lkIENvbGxlY3Rvcjo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5
KHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit2b2lkIEhlYXA6Om1hcmtTdGFja09iamVjdHNDb25z
ZXJ2YXRpdmVseSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQogewogICBpZiAoc3RhcnQgPiBlbmQp
IHsKICAgICB2b2lkKiB0bXAgPSBzdGFydDsKQEAgLTUxMSw3ICs0MDcsNyBAQCB2b2lkIENvbGxl
Y3Rvcjo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhCiAgICAgICAgICAgLy8gTWFyayB0aGUgdGhl
IG51bWJlciBoZWFwLCB3ZSBjYW4gbWFyayB0aGVzZSBDZWxscyBkaXJlY3RseSB0byBhdm9pZCB0
aGUgdmlydHVhbCBjYWxsIGNvc3QKICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJs
b2NrIDwgdXNlZE51bWJlckJsb2NrczsgYmxvY2srKykgewogICAgICAgICAgICAgICBpZiAoKG51
bWJlckJsb2Nrc1tibG9ja10gPT0gYmxvY2tBZGRyKSAmIChvZmZzZXQgPD0gbGFzdENlbGxPZmZz
ZXQpKSB7Ci0gICAgICAgICAgICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oeEFzQml0cykpOworICAgICAgICAgICAgICAgICAgSGVhcDo6bWFya0Nl
bGwocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKSk7CiAgICAgICAgICAgICAgICAg
ICBnb3RvIGVuZE1hcmtMb29wOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQpAQCAtNTMz
LDcgKzQyOSw3IEBAIHZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmEKICAg
fQogfQogCi12b2lkIE5FVkVSX0lOTElORSBDb2xsZWN0b3I6Om1hcmtDdXJyZW50VGhyZWFkQ29u
c2VydmF0aXZlbHlJbnRlcm5hbCgpCit2b2lkIE5FVkVSX0lOTElORSBIZWFwOjptYXJrU3RhY2tP
YmplY3RzQ29uc2VydmF0aXZlbHlJbnRlcm5hbCgpCiB7CiAgICAgdm9pZCogZHVtbXk7CiAgICAg
dm9pZCogc3RhY2tQb2ludGVyID0gJmR1bW15OwpAQCAtNTQxLDcgKzQzNyw3IEBAIHZvaWQgTkVW
RVJfSU5MSU5FIENvbGxlY3Rvcjo6bWFya0N1cnJlbnQKICAgICBtYXJrU3RhY2tPYmplY3RzQ29u
c2VydmF0aXZlbHkoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwogfQogCi12b2lkIENvbGxlY3Rv
cjo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpCit2b2lkIEhlYXA6Om1hcmtTdGFj
a09iamVjdHNDb25zZXJ2YXRpdmVseSgpCiB7CiAgICAgLy8gc2V0am1wIGZvcmNlcyB2b2xhdGls
ZSByZWdpc3RlcnMgb250byB0aGUgc3RhY2sKICAgICBqbXBfYnVmIHJlZ2lzdGVyczsKQEAgLTU1
NCwxNzEgKzQ1MCwxMCBAQCB2b2lkIENvbGxlY3Rvcjo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2
CiAjcHJhZ21hIHdhcm5pbmcocG9wKQogI2VuZGlmCiAKLSAgICBtYXJrQ3VycmVudFRocmVhZENv
bnNlcnZhdGl2ZWx5SW50ZXJuYWwoKTsKKyAgICBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZl
bHlJbnRlcm5hbCgpOwogfQogCi0jaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCi0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBzdXNwZW5kVGhyZWFkKGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0Zm9ybVRo
cmVhZCkKLXsKLSNpZiBQTEFURk9STShEQVJXSU4pCi0gIHRocmVhZF9zdXNwZW5kKHBsYXRmb3Jt
VGhyZWFkKTsKLSNlbGlmIFBMQVRGT1JNKFdJTl9PUykKLSAgU3VzcGVuZFRocmVhZChwbGF0Zm9y
bVRocmVhZC5oYW5kbGUpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3BlbmQgdGhy
ZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJl
c3VtZVRocmVhZChjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQpCi17Ci0jaWYg
UExBVEZPUk0oREFSV0lOKQotICB0aHJlYWRfcmVzdW1lKHBsYXRmb3JtVGhyZWFkKTsKLSNlbGlm
IFBMQVRGT1JNKFdJTl9PUykKLSAgUmVzdW1lVGhyZWFkKHBsYXRmb3JtVGhyZWFkLmhhbmRsZSk7
Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gcmVzdW1lIHRocmVhZHMgb24gdGhpcyBwbGF0
Zm9ybQotI2VuZGlmCi19Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1c3dvcmRfdDsgLy8gd29y
ZCBzaXplLCBhc3N1bWVkIHRvIGJlIGVpdGhlciAzMiBvciA2NCBiaXQKLQotI2lmIFBMQVRGT1JN
KERBUldJTikKLQotI2lmICAgICBQTEFURk9STShYODYpCi10eXBlZGVmIGkzODZfdGhyZWFkX3N0
YXRlX3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0jZWxpZiAgIFBMQVRGT1JNKFg4Nl82NCkK
LXR5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0j
ZWxpZiAgIFBMQVRGT1JNKFBQQykKLXR5cGVkZWYgcHBjX3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
VGhyZWFkUmVnaXN0ZXJzOwotI2VsaWYgICBQTEFURk9STShQUEM2NCkKLXR5cGVkZWYgcHBjX3Ro
cmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0jZWxzZQotI2Vycm9yIFVu
a25vd24gQXJjaGl0ZWN0dXJlCi0jZW5kaWYKLQotI2VsaWYgUExBVEZPUk0oV0lOX09TKSYmIFBM
QVRGT1JNKFg4NikKLXR5cGVkZWYgQ09OVEVYVCBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVyczsKLSNl
bHNlCi0jZXJyb3IgTmVlZCBhIHRocmVhZCByZWdpc3RlciBzdHJ1Y3QgZm9yIHRoaXMgcGxhdGZv
cm0KLSNlbmRpZgotCi1zaXplX3QgZ2V0UGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMoY29uc3QgUGxh
dGZvcm1UaHJlYWQmIHBsYXRmb3JtVGhyZWFkLCBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVycyYgcmVn
cykKLXsKLSNpZiBQTEFURk9STShEQVJXSU4pCi0KLSNpZiAgICAgUExBVEZPUk0oWDg2KQotICB1
bnNpZ25lZCB1c2VyX2NvdW50ID0gc2l6ZW9mKHJlZ3MpL3NpemVvZihpbnQpOwotICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxpZiAgIFBMQVRG
T1JNKFg4Nl82NCkKLSAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9D
T1VOVDsKLSAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2
NDsKLSNlbGlmICAgUExBVEZPUk0oUFBDKSAKLSAgdW5zaWduZWQgdXNlcl9jb3VudCA9IFBQQ19U
SFJFQURfU1RBVEVfQ09VTlQ7Ci0gIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENf
VEhSRUFEX1NUQVRFOwotI2VsaWYgICBQTEFURk9STShQUEM2NCkKLSAgdW5zaWduZWQgdXNlcl9j
b3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNo
aXRlY3R1cmUKLSNlbmRpZgotCi0gIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9z
dGF0ZShwbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ3MsICZ1c2Vy
X2NvdW50KTsKLSAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICBXVEZSZXBvcnRG
YXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVk
IGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlz
IHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMg
bm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwotICAgIENSQVNIKCk7Ci0gIH0KLSAgcmV0dXJuIHVz
ZXJfY291bnQgKiBzaXplb2YodXN3b3JkX3QpOwotLy8gZW5kIFBMQVRGT1JNKERBUldJTikKLQot
I2VsaWYgUExBVEZPUk0oV0lOX09TKSAmJiBQTEFURk9STShYODYpCi0gIHJlZ3MuQ29udGV4dEZs
YWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MIHwgQ09OVEVYVF9TRUdNRU5U
UzsKLSAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZC5oYW5kbGUsICZyZWdzKTsKLSAg
cmV0dXJuIHNpemVvZihDT05URVhUKTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQg
dGhyZWFkIHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkKiBvdGhlclRocmVhZFN0YWNrUG9pbnRlcihjb25zdCBQbGF0Zm9ybVRocmVhZFJl
Z2lzdGVycyYgcmVncykKLXsKLSNpZiBQTEFURk9STShEQVJXSU4pCi0KLSNpZiBfX0RBUldJTl9V
TklYMDMKLQotI2lmIFBMQVRGT1JNKFg4NikKLSAgcmV0dXJuICh2b2lkKilyZWdzLl9fZXNwOwot
I2VsaWYgUExBVEZPUk0oWDg2XzY0KQotICByZXR1cm4gKHZvaWQqKXJlZ3MuX19yc3A7Ci0jZWxp
ZiBQTEFURk9STShQUEMpIHx8IFBMQVRGT1JNKFBQQzY0KQotICByZXR1cm4gKHZvaWQqKXJlZ3Mu
X19yMTsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0jZWxz
ZSAvLyAhX19EQVJXSU5fVU5JWDAzCi0KLSNpZiBQTEFURk9STShYODYpCi0gIHJldHVybiAodm9p
ZCopcmVncy5lc3A7Ci0jZWxpZiBQTEFURk9STShYODZfNjQpCi0gIHJldHVybiAodm9pZCopcmVn
cy5yc3A7Ci0jZWxpZiAoUExBVEZPUk0oUFBDKSB8fCBQTEFURk9STShQUEM2NCkpCi0gIHJldHVy
biAodm9pZCopcmVncy5yMTsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNl
bmRpZgotCi0jZW5kaWYgLy8gX19EQVJXSU5fVU5JWDAzCi0KLS8vIGVuZCBQTEFURk9STShEQVJX
SU4pCi0jZWxpZiBQTEFURk9STShYODYpICYmIFBMQVRGT1JNKFdJTl9PUykKLSAgcmV0dXJuICh2
b2lkKikodWludHB0cl90KXJlZ3MuRXNwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdl
dCB0aGUgc3RhY2sgcG9pbnRlciBmb3IgYW5vdGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQot
I2VuZGlmCi19Ci0KLXZvaWQgQ29sbGVjdG9yOjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVs
eShUaHJlYWQqIHRocmVhZCkKLXsKLSAgc3VzcGVuZFRocmVhZCh0aHJlYWQtPnBsYXRmb3JtVGhy
ZWFkKTsKLQotICBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVycyByZWdzOwotICBzaXplX3QgcmVnU2l6
ZSA9IGdldFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQsIHJl
Z3MpOwotCi0gIC8vIG1hcmsgdGhlIHRocmVhZCdzIHJlZ2lzdGVycwotICBtYXJrU3RhY2tPYmpl
Y3RzQ29uc2VydmF0aXZlbHkoKHZvaWQqKSZyZWdzLCAodm9pZCopKChjaGFyKikmcmVncyArIHJl
Z1NpemUpKTsKLSAKLSAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50
ZXIocmVncyk7Ci0gIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFja1BvaW50ZXIs
IHRocmVhZC0+c3RhY2tCYXNlKTsKLQotICByZXN1bWVUaHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRo
cmVhZCk7Ci19Ci0KLSNlbmRpZgotCi12b2lkIENvbGxlY3Rvcjo6bWFya1N0YWNrT2JqZWN0c0Nv
bnNlcnZhdGl2ZWx5KCkKLXsKLSAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpOwot
Ci0jaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCi0gIGZvciAoVGhyZWFkICp0aHJlYWQgPSByZWdp
c3RlcmVkVGhyZWFkczsgdGhyZWFkICE9IE5VTEw7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewot
ICAgIGlmICghcHRocmVhZF9lcXVhbCh0aHJlYWQtPnBvc2l4VGhyZWFkLCBwdGhyZWFkX3NlbGYo
KSkpIHsKLSAgICAgIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KHRocmVhZCk7Ci0gICAg
fQotICB9Ci0jZW5kaWYKLX0KLQotdHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiBQcm90
ZWN0Q291bnRTZXQ7Ci0KLXN0YXRpYyBQcm90ZWN0Q291bnRTZXQmIHByb3RlY3RlZFZhbHVlcygp
Ci17Ci0gICAgc3RhdGljIFByb3RlY3RDb3VudFNldCBzdGF0aWNQcm90ZWN0Q291bnRTZXQ7Ci0g
ICAgcmV0dXJuIHN0YXRpY1Byb3RlY3RDb3VudFNldDsKLX0KLQotdm9pZCBDb2xsZWN0b3I6OnBy
b3RlY3QoSlNWYWx1ZSAqaykKK3ZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlICprKQogewogICAg
IEFTU0VSVChrKTsKICAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOwpAQCAtNzI3
LDEwICs0NjIsMTAgQEAgdm9pZCBDb2xsZWN0b3I6OnByb3RlY3QoSlNWYWx1ZSAqaykKICAgICBp
ZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGspKQogICAgICAgcmV0dXJuOwogCi0gICAgcHJv
dGVjdGVkVmFsdWVzKCkuYWRkKGstPmFzQ2VsbCgpKTsKKyAgICBwcm90ZWN0ZWRWYWx1ZXMuYWRk
KGstPmFzQ2VsbCgpKTsKIH0KIAotdm9pZCBDb2xsZWN0b3I6OnVucHJvdGVjdChKU1ZhbHVlICpr
KQordm9pZCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSAqaykKIHsKICAgICBBU1NFUlQoayk7CiAg
ICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKQEAgLTczOSw4NCArNDc0LDM1IEBA
IHZvaWQgQ29sbGVjdG9yOjp1bnByb3RlY3QoSlNWYWx1ZSAqaykKICAgICBpZiAoSlNJbW1lZGlh
dGU6OmlzSW1tZWRpYXRlKGspKQogICAgICAgcmV0dXJuOwogCi0gICAgcHJvdGVjdGVkVmFsdWVz
KCkucmVtb3ZlKGstPmFzQ2VsbCgpKTsKKyAgICBwcm90ZWN0ZWRWYWx1ZXMucmVtb3ZlKGstPmFz
Q2VsbCgpKTsKIH0KIAotdm9pZCBDb2xsZWN0b3I6OmNvbGxlY3RPbk1haW5UaHJlYWRPbmx5KEpT
VmFsdWUqIHZhbHVlKQorSGVhcCogSGVhcDo6aGVhcChKU1ZhbHVlKiB2KQogewotICAgIEFTU0VS
VCh2YWx1ZSk7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICBBU1NF
UlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKLQotICAgIGlmIChKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpKQotICAgICAgcmV0dXJuOwotCi0gICAgSlNDZWxs
KiBjZWxsID0gdmFsdWUtPmFzQ2VsbCgpOwotICAgIGNlbGxCbG9jayhjZWxsKS0+Y29sbGVjdE9u
TWFpblRocmVhZE9ubHkuc2V0KGNlbGxPZmZzZXQoY2VsbCkpOwotICAgICsrbWFpblRocmVhZE9u
bHlPYmplY3RDb3VudDsKKyAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhNRTogc2hvdWxkIGFzc2VydCB0aGF0IHRoZSByZXN1
bHQgZXF1YWxzIHRocmVhZEhlYXAoKSwgYnV0IGN1cnJlbnRseSwgdGhpcyBmYWlscyBhcyBkYXRh
YmFzZSBjb2RlIHVzZXMgZ2NVbnByb3RlY3QgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisgICAg
Ly8gVGhhdCdzIGEgcmFjZSBjb25kaXRpb24gYW5kIHNob3VsZCBiZSBmaXhlZC4KKyAgICByZXR1
cm4gSGVhcDo6Y2VsbEJsb2NrKHYtPmFzQ2VsbCgpKS0+aGVhcDsKIH0KIAotdm9pZCBDb2xsZWN0
b3I6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKCkKK3ZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVj
dHMoKQogewotICBQcm90ZWN0Q291bnRTZXQmIHByb3RlY3RlZFZhbHVlcyA9IEtKUzo6cHJvdGVj
dGVkVmFsdWVzKCk7Ci0gIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gcHJvdGVjdGVk
VmFsdWVzLmVuZCgpOwotICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBwcm90
ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgIEhhc2hDb3VudGVkU2V0
PEpTQ2VsbCo+OjppdGVyYXRvciBlbmQgPSBwcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CisgIGZvciAo
SGFzaENvdW50ZWRTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVkVmFsdWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgIEpTQ2VsbCAqdmFsID0gaXQtPmZpcnN0Owog
ICAgIGlmICghdmFsLT5tYXJrZWQoKSkKICAgICAgIHZhbC0+bWFyaygpOwogICB9CiB9CiAKLXZv
aWQgQ29sbGVjdG9yOjptYXJrTWFpblRocmVhZE9ubHlPYmplY3RzKCkKLXsKLSNpZiBVU0UoTVVM
VElQTEVfVEhSRUFEUykKLSAgICBBU1NFUlQoIW9uTWFpblRocmVhZCgpKTsKLSNlbmRpZgotCi0g
ICAgLy8gT3B0aW1pemF0aW9uIGZvciBjbGllbnRzIHRoYXQgbmV2ZXIgcmVnaXN0ZXIgIm1haW4g
dGhyZWFkIG9ubHkiIG9iamVjdHMuCi0gICAgaWYgKCFtYWluVGhyZWFkT25seU9iamVjdENvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIG9wdGltaXplIHRoaXMg
bWFya2luZyBhbGdvcml0aG0gYnkga2VlcGluZyBhbiBleGFjdCBzZXQgb2YgCi0gICAgLy8gIm1h
aW4gdGhyZWFkIG9ubHkiIG9iamVjdHMgd2hlbiB0aGUgIm1haW4gdGhyZWFkIG9ubHkiIG9iamVj
dCBjb3VudCBpcyAKLSAgICAvLyBzbWFsbC4gV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGFuIGV4YWN0
IHNldCBhbGwgdGhlIHRpbWUsIGJlY2F1c2UgV2ViQ29yZSAKLSAgICAvLyB0ZW5kcyB0byBjcmVh
dGUgbG90cyBvZiAibWFpbiB0aHJlYWQgb25seSIgb2JqZWN0cywgYW5kIGFsbCB0aGF0IHNldCAK
LSAgICAvLyB0aHJhc2hpbmcgY2FuIGJlIGV4cGVuc2l2ZS4KLSAgICAKLSAgICBzaXplX3QgY291
bnQgPSAwOwotICAgIAotICAgIC8vIFdlIGRvbid0IGxvb2sgYXQgdGhlIG51bWJlckhlYXAgYXMg
cHJpbWl0aXZlIHZhbHVlcyBjYW4gbmV2ZXIgYmUgbWFya2VkIGFzIG1haW4gdGhyZWFkIG9ubHkK
LSAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgcHJpbWFyeUhlYXAudXNlZEJsb2Nr
czsgYmxvY2srKykgewotICAgICAgICBBU1NFUlQoY291bnQgPCBtYWluVGhyZWFkT25seU9iamVj
dENvdW50KTsKLSAgICAgICAgCi0gICAgICAgIENvbGxlY3RvckJsb2NrKiBjdXJCbG9jayA9IHBy
aW1hcnlIZWFwLmJsb2Nrc1tibG9ja107Ci0gICAgICAgIHNpemVfdCBtaW5pbXVtQ2VsbHNUb1By
b2Nlc3MgPSBjdXJCbG9jay0+dXNlZENlbGxzOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
KGkgPCBtaW5pbXVtQ2VsbHNUb1Byb2Nlc3MpICYgKGkgPCBDRUxMU19QRVJfQkxPQ0spOyBpKysp
IHsKLSAgICAgICAgICAgIENvbGxlY3RvckNlbGwqIGNlbGwgPSBjdXJCbG9jay0+Y2VsbHMgKyBp
OwotICAgICAgICAgICAgaWYgKGNlbGwtPnUuZnJlZUNlbGwuemVyb0lmRnJlZSA9PSAwKQotICAg
ICAgICAgICAgICAgICsrbWluaW11bUNlbGxzVG9Qcm9jZXNzOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1ckJsb2NrLT5jb2xsZWN0T25NYWluVGhyZWFkT25seS5n
ZXQoaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJCbG9jay0+bWFya2VkLmdldChp
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJldF9j
YXN0PEpTQ2VsbCo+KGNlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW1wLT5tYXJrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQg
PT0gbWFpblRocmVhZE9ubHlPYmplY3RDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXRlbXBsYXRlIDxDb2xsZWN0b3I6OkhlYXBUeXBlIGhlYXBUeXBlPiBzaXplX3QgQ29s
bGVjdG9yOjpzd2VlcChib29sIGN1cnJlbnRUaHJlYWRJc01haW5UaHJlYWQpCit0ZW1wbGF0ZSA8
SGVhcDo6SGVhcFR5cGUgaGVhcFR5cGU+IHNpemVfdCBIZWFwOjpzd2VlcCgpCiB7CiAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBIZWFwQ29uc3RhbnRzPGhlYXBUeXBlPjo6QmxvY2sgQmxvY2s7CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBIZWFwQ29uc3RhbnRzPGhlYXBUeXBlPjo6Q2VsbCBDZWxsOwogCi0g
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRUaHJlYWRJc01haW5UaHJlYWQpOyAvLyBjdXJyZW50VGhy
ZWFkSXNNYWluVGhyZWFkIGlzIG9ubHkgdXNlZCBpbiBBU1NFUlRzCiAgICAgLy8gU1dFRVA6IGRl
bGV0ZSBldmVyeXRoaW5nIHdpdGggYSB6ZXJvIHJlZmNvdW50IChnYXJiYWdlKSBhbmQgdW5tYXJr
IGV2ZXJ5dGhpbmcgZWxzZQotICAgIENvbGxlY3RvckhlYXAmIGhlYXAgPSBoZWFwVHlwZSA9PSBD
b2xsZWN0b3I6OlByaW1hcnlIZWFwID8gcHJpbWFyeUhlYXAgOiBudW1iZXJIZWFwOworICAgIENv
bGxlY3RvckhlYXAmIGhlYXAgPSBoZWFwVHlwZSA9PSBIZWFwOjpQcmltYXJ5SGVhcCA/IHByaW1h
cnlIZWFwIDogbnVtYmVySGVhcDsKICAgICAKICAgICBzaXplX3QgZW1wdHlCbG9ja3MgPSAwOwog
ICAgIHNpemVfdCBudW1MaXZlT2JqZWN0cyA9IGhlYXAubnVtTGl2ZU9iamVjdHM7CkBAIC04MzMs
NyArNTE5LDcgQEAgdGVtcGxhdGUgPENvbGxlY3Rvcjo6SGVhcFR5cGUgaGVhcFR5cGU+IAogICAg
ICAgICAgICAgICAgIGlmICghY3VyQmxvY2stPm1hcmtlZC5nZXQoaSA+PiBIZWFwQ29uc3RhbnRz
PGhlYXBUeXBlPjo6Yml0bWFwU2hpZnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIENlbGwqIGNl
bGwgPSBjdXJCbG9jay0+Y2VsbHMgKyBpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGhlYXBUeXBlICE9IENvbGxlY3Rvcjo6TnVtYmVySGVhcCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaGVhcFR5cGUgIT0gSGVhcDo6TnVtYmVySGVhcCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJldF9jYXN0PEpTQ2Vs
bCo+KGNlbGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBh
bGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAoV2UgZG9uJ3QgbmVlZCB0aGlzIGNoZWNrIGVhcmxpZXIgYmVjYXVzZSBub3RoaW5nIHBy
aW9yIHRoaXMgcG9pbnQgCkBAIC04NDEsMTEgKzUyNyw2IEBAIHRlbXBsYXRlIDxDb2xsZWN0b3I6
OkhlYXBUeXBlIGhlYXBUeXBlPiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT51
LmZyZWVDZWxsLnplcm9JZkZyZWUgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc01haW5UaHJlYWQgfHwgIWN1ckJsb2NrLT5jb2xsZWN0
T25NYWluVGhyZWFkT25seS5nZXQoaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
ckJsb2NrLT5jb2xsZWN0T25NYWluVGhyZWFkT25seS5nZXQoaSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJCbG9jay0+Y29sbGVjdE9uTWFpblRocmVhZE9ubHkuY2xlYXIoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1Db2xsZWN0b3I6Om1haW5UaHJlYWRPbmx5
T2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbXAtPn5KU0NlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTg2NiwxMyArNTQ3LDggQEAgdGVtcGxhdGUgPENvbGxlY3Rvcjo6SGVh
cFR5cGUgaGVhcFR5cGU+IAogICAgICAgICAgICAgICAgICAgICArK21pbmltdW1DZWxsc1RvUHJv
Y2VzczsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAo
IWN1ckJsb2NrLT5tYXJrZWQuZ2V0KGkgPj4gSGVhcENvbnN0YW50czxoZWFwVHlwZT46OmJpdG1h
cFNoaWZ0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXBUeXBlICE9IENvbGxl
Y3Rvcjo6TnVtYmVySGVhcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXBUeXBl
ICE9IEhlYXA6Ok51bWJlckhlYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Nl
bGwgKmltcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oY2VsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc01haW5UaHJlYWQgfHwgIWN1ckJs
b2NrLT5jb2xsZWN0T25NYWluVGhyZWFkT25seS5nZXQoaSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjdXJCbG9jay0+Y29sbGVjdE9uTWFpblRocmVhZE9ubHkuZ2V0KGkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckJsb2NrLT5jb2xsZWN0T25NYWlu
VGhyZWFkT25seS5jbGVhcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1D
b2xsZWN0b3I6Om1haW5UaHJlYWRPbmx5T2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLS11c2Vk
Q2VsbHM7CkBAIC05MTksNyArNTk1LDcgQEAgdGVtcGxhdGUgPENvbGxlY3Rvcjo6SGVhcFR5cGUg
aGVhcFR5cGU+IAogICAgIHJldHVybiBudW1MaXZlT2JqZWN0czsKIH0KICAgICAKLWJvb2wgQ29s
bGVjdG9yOjpjb2xsZWN0KCkKK2Jvb2wgSGVhcDo6Y29sbGVjdCgpCiB7CiAgIEFTU0VSVChKU0xv
Y2s6OmxvY2tDb3VudCgpID4gMCk7CiAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkpOwpAQCAtOTMxLDggKzYwNyw2IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0
KCkKICAgcHJpbWFyeUhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAgIG51
bWJlckhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAKLSAgYm9vbCBjdXJy
ZW50VGhyZWFkSXNNYWluVGhyZWFkID0gb25NYWluVGhyZWFkKCk7Ci0KICAgLy8gTUFSSzogZmly
c3QgbWFyayBhbGwgcmVmZXJlbmNlZCBvYmplY3RzIHJlY3Vyc2l2ZWx5IHN0YXJ0aW5nIG91dCBm
cm9tIHRoZSBzZXQgb2Ygcm9vdCBvYmplY3RzCiAKICNpZm5kZWYgTkRFQlVHCkBAIC05NDQsMTkg
KzYxOCwxNiBAQCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAKICAgbWFya1N0YWNrT2JqZWN0
c0NvbnNlcnZhdGl2ZWx5KCk7CiAgIG1hcmtQcm90ZWN0ZWRPYmplY3RzKCk7Ci0gIExpc3Q6Om1h
cmtQcm90ZWN0ZWRMaXN0cygpOwotI2lmIFVTRShNVUxUSVBMRV9USFJFQURTKQotICBpZiAoIWN1
cnJlbnRUaHJlYWRJc01haW5UaHJlYWQpCi0gICAgbWFya01haW5UaHJlYWRPbmx5T2JqZWN0cygp
OwotI2VuZGlmCisgIGlmIChtX21hcmtMaXN0U2V0LnNpemUoKSkKKyAgICBMaXN0OjptYXJrUHJv
dGVjdGVkTGlzdHMobV9tYXJrTGlzdFNldCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgIGZhc3RNYWxs
b2NBbGxvdygpOwogI2VuZGlmCiAgICAgCiAgIHNpemVfdCBvcmlnaW5hbExpdmVPYmplY3RzID0g
cHJpbWFyeUhlYXAubnVtTGl2ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxpdmVPYmplY3RzOwot
ICBzaXplX3QgbnVtTGl2ZU9iamVjdHMgPSBzd2VlcDxQcmltYXJ5SGVhcD4oY3VycmVudFRocmVh
ZElzTWFpblRocmVhZCk7Ci0gIG51bUxpdmVPYmplY3RzICs9IHN3ZWVwPE51bWJlckhlYXA+KGN1
cnJlbnRUaHJlYWRJc01haW5UaHJlYWQpOworICBzaXplX3QgbnVtTGl2ZU9iamVjdHMgPSBzd2Vl
cDxQcmltYXJ5SGVhcD4oKTsKKyAgbnVtTGl2ZU9iamVjdHMgKz0gc3dlZXA8TnVtYmVySGVhcD4o
KTsKICAgCiAgIHByaW1hcnlIZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsK
ICAgbnVtYmVySGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CkBAIC05NjQs
MTIgKzYzNSwxMiBAQCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAgIHJldHVybiBudW1MaXZl
T2JqZWN0cyA8IG9yaWdpbmFsTGl2ZU9iamVjdHM7CiB9CiAKLXNpemVfdCBDb2xsZWN0b3I6OnNp
emUoKSAKK3NpemVfdCBIZWFwOjpzaXplKCkgCiB7CiAgIHJldHVybiBwcmltYXJ5SGVhcC5udW1M
aXZlT2JqZWN0cyArIG51bWJlckhlYXAubnVtTGl2ZU9iamVjdHM7IAogfQogCi1zaXplX3QgQ29s
bGVjdG9yOjpnbG9iYWxPYmplY3RDb3VudCgpCitzaXplX3QgSGVhcDo6Z2xvYmFsT2JqZWN0Q291
bnQoKQogewogICBzaXplX3QgY291bnQgPSAwOwogICBpZiAoSlNHbG9iYWxPYmplY3Q6OmhlYWQo
KSkgewpAQCAtOTgyLDEzICs2NTMsMTMgQEAgc2l6ZV90IENvbGxlY3Rvcjo6Z2xvYmFsT2JqZWN0
Q291bnQoKQogICByZXR1cm4gY291bnQ7CiB9CiAKLXNpemVfdCBDb2xsZWN0b3I6OnByb3RlY3Rl
ZEdsb2JhbE9iamVjdENvdW50KCkKK3NpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RD
b3VudCgpCiB7CiAgIHNpemVfdCBjb3VudCA9IDA7CiAgIGlmIChKU0dsb2JhbE9iamVjdDo6aGVh
ZCgpKSB7CiAgICAgSlNHbG9iYWxPYmplY3QqIG8gPSBKU0dsb2JhbE9iamVjdDo6aGVhZCgpOwog
ICAgIGRvIHsKLSAgICAgIGlmIChwcm90ZWN0ZWRWYWx1ZXMoKS5jb250YWlucyhvKSkKKyAgICAg
IGlmIChwcm90ZWN0ZWRWYWx1ZXMuY29udGFpbnMobykpCiAgICAgICAgICsrY291bnQ7CiAgICAg
ICBvID0gby0+bmV4dCgpOwogICAgIH0gd2hpbGUgKG8gIT0gSlNHbG9iYWxPYmplY3Q6OmhlYWQo
KSk7CkBAIC05OTYsOSArNjY3LDkgQEAgc2l6ZV90IENvbGxlY3Rvcjo6cHJvdGVjdGVkR2xvYmFs
T2JqZWN0QwogICByZXR1cm4gY291bnQ7CiB9CiAKLXNpemVfdCBDb2xsZWN0b3I6OnByb3RlY3Rl
ZE9iamVjdENvdW50KCkKK3NpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCiB7Ci0g
IHJldHVybiBwcm90ZWN0ZWRWYWx1ZXMoKS5zaXplKCk7CisgIHJldHVybiBwcm90ZWN0ZWRWYWx1
ZXMuc2l6ZSgpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqdHlwZU5hbWUoSlNDZWxsICp2YWwp
CkBAIC0xMDM0LDI0ICs3MDUsMjMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVOYW1lKEpTQ2Vs
bCAqdmFsKQogICByZXR1cm4gbmFtZTsKIH0KIAotSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
KiBDb2xsZWN0b3I6OnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKQorSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+KiBIZWFwOjpwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkKIHsKICAgICBI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIGNvdW50cyA9IG5ldyBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj47CiAKLSAgICBQcm90ZWN0Q291bnRTZXQmIHByb3RlY3RlZFZhbHVlcyA9IEtK
Uzo6cHJvdGVjdGVkVmFsdWVzKCk7Ci0gICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQg
PSBwcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7Ci0gICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIGl0ID0gcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBI
YXNoQ291bnRlZFNldDxKU0NlbGwqPjo6aXRlcmF0b3IgZW5kID0gcHJvdGVjdGVkVmFsdWVzLmVu
ZCgpOworICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIGl0ID0gcHJv
dGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgY291bnRzLT5h
ZGQodHlwZU5hbWUoaXQtPmZpcnN0KSk7CiAKICAgICByZXR1cm4gY291bnRzOwogfQogCi1ib29s
IENvbGxlY3Rvcjo6aXNCdXN5KCkKK2Jvb2wgSGVhcDo6aXNCdXN5KCkKIHsKICAgICByZXR1cm4g
KHByaW1hcnlIZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pIHwgKG51bWJl
ckhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbik7CiB9CiAKLXZvaWQgQ29s
bGVjdG9yOjpyZXBvcnRPdXRPZk1lbW9yeVRvQWxsRXhlY1N0YXRlcygpCit2b2lkIEhlYXA6OnJl
cG9ydE91dE9mTWVtb3J5VG9BbGxFeGVjU3RhdGVzKCkKIHsKICAgICBpZiAoIUpTR2xvYmFsT2Jq
ZWN0OjpoZWFkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9j
b2xsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmgJ
KHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2NyArMjYsOTAgQEAKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBXVEYgeworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBUaHJlYWRTcGVj
aWZpYzsKK30KIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAgY2xhc3MgQ29sbGVjdG9yQmxvY2s7CiAg
IGNsYXNzIEpTQ2VsbDsKICAgY2xhc3MgSlNWYWx1ZTsKLSAgY2xhc3MgQ29sbGVjdG9yQmxvY2s7
CisgIGNsYXNzIExpc3Q7CisKKyAgZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRp
b24sIEFsbG9jYXRpb24sIENvbGxlY3Rpb24gfTsKKworICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7
CisgICAgQ29sbGVjdG9yQmxvY2sqKiBibG9ja3M7CisgICAgc2l6ZV90IG51bUJsb2NrczsKKyAg
ICBzaXplX3QgdXNlZEJsb2NrczsKKyAgICBzaXplX3QgZmlyc3RCbG9ja1dpdGhQb3NzaWJsZVNw
YWNlOworCisgICAgc2l6ZV90IG51bUxpdmVPYmplY3RzOworICAgIHNpemVfdCBudW1MaXZlT2Jq
ZWN0c0F0TGFzdENvbGxlY3Q7CisgICAgc2l6ZV90IGV4dHJhQ29zdDsKIAotICBjbGFzcyBDb2xs
ZWN0b3IgeworICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzczsKKyAg
fTsKKworICBjbGFzcyBIZWFwIHsKICAgcHVibGljOgotICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3Qgcyk7Ci0gICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlTnVtYmVyKHNpemVfdCBzKTsK
LSAgICBzdGF0aWMgYm9vbCBjb2xsZWN0KCk7Ci0gICAgc3RhdGljIGJvb2wgaXNCdXN5KCk7IC8v
IHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCisgICAg
c3RhdGljIEhlYXAqIHRocmVhZEhlYXAoKTsKKworICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBz
KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU51bWJlcihzaXplX3Qgcyk7CisgICAgYm9vbCBjb2xsZWN0
KCk7CisgICAgYm9vbCBpc0J1c3koKTsgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNvbGxl
Y3Rpb24gaXMgaW4gcHJvZ3Jlc3MKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFD
b3N0U2l6ZSA9IDI1NjsKIAotICAgIHN0YXRpYyB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChz
aXplX3QgY29zdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3Qp
OwogCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCk7CisgICAgc2l6ZV90IHNpemUoKTsKIAotICAg
IHN0YXRpYyB2b2lkIHByb3RlY3QoSlNWYWx1ZSopOwotICAgIHN0YXRpYyB2b2lkIHVucHJvdGVj
dChKU1ZhbHVlKik7CisgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUqKTsKKyAgICB2b2lkIHVucHJv
dGVjdChKU1ZhbHVlKik7CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29sbGVjdE9uTWFpblRocmVh
ZE9ubHkoSlNWYWx1ZSopOworICAgIHN0YXRpYyBIZWFwKiBoZWFwKEpTVmFsdWUqKTsgLy8gMCBm
b3IgaW1tZWRpYXRlIHZhbHVlcwogCi0gICAgc3RhdGljIHNpemVfdCBnbG9iYWxPYmplY3RDb3Vu
dCgpOwotICAgIHN0YXRpYyBzaXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKLSAgICBzdGF0
aWMgc2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7Ci0gICAgc3RhdGljIEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiogcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpOwotCi0g
ICAgY2xhc3MgVGhyZWFkOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVGhyZWFkKCk7Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJBc01haW5UaHJlYWQoKTsKKyAgICBzaXplX3QgZ2xv
YmFsT2JqZWN0Q291bnQoKTsKKyAgICBzaXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAg
ICBzaXplX3QgcHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICBIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj4qIHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKIAogICAgIHN0YXRp
YyBib29sIGlzQ2VsbE1hcmtlZChjb25zdCBKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCBtYXJr
Q2VsbChKU0NlbGwqKTsKIAorICAgIEhhc2hTZXQ8TGlzdCo+JiBtYXJrTGlzdFNldCgpIHsgcmV0
dXJuIG1fbWFya0xpc3RTZXQ7IH0KICAgICBlbnVtIEhlYXBUeXBlIHsgUHJpbWFyeUhlYXAsIE51
bWJlckhlYXAgfTsKIAogICBwcml2YXRlOgotICAgIHRlbXBsYXRlIDxDb2xsZWN0b3I6OkhlYXBU
eXBlIGhlYXBUeXBlPiBzdGF0aWMgdm9pZCogaGVhcEFsbG9jYXRlKHNpemVfdCBzKTsKLSAgICB0
ZW1wbGF0ZSA8Q29sbGVjdG9yOjpIZWFwVHlwZSBoZWFwVHlwZT4gc3RhdGljIHNpemVfdCBzd2Vl
cChib29sKTsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpUaHJlYWRTcGVjaWZpYzxIZWFwPjsKKwor
ICAgIEhlYXAoKTsKKyAgICBIZWFwKGNvbnN0IEhlYXAmKTsKKworICAgIHRlbXBsYXRlIDxIZWFw
OjpIZWFwVHlwZSBoZWFwVHlwZT4gdm9pZCogaGVhcEFsbG9jYXRlKHNpemVfdCBzKTsKKyAgICB0
ZW1wbGF0ZSA8SGVhcDo6SGVhcFR5cGUgaGVhcFR5cGU+IHNpemVfdCBzd2VlcCgpOwogICAgIHN0
YXRpYyBjb25zdCBDb2xsZWN0b3JCbG9jayogY2VsbEJsb2NrKGNvbnN0IEpTQ2VsbCopOwogICAg
IHN0YXRpYyBDb2xsZWN0b3JCbG9jayogY2VsbEJsb2NrKEpTQ2VsbCopOwogICAgIHN0YXRpYyBz
aXplX3QgY2VsbE9mZnNldChjb25zdCBKU0NlbGwqKTsKIAotICAgIENvbGxlY3RvcigpOwotCi0g
ICAgc3RhdGljIHZvaWQgcmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQg
bWFya1Byb3RlY3RlZE9iamVjdHMoKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrTWFpblRocmVhZE9u
bHlPYmplY3RzKCk7Ci0gICAgc3RhdGljIHZvaWQgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRp
dmVseSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJ
bnRlcm5hbCgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5
KFRocmVhZCopOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVs
eSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSh2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKLQotICAgIHN0YXRpYyBzaXplX3QgbWFpblRocmVhZE9ubHlP
YmplY3RDb3VudDsKLSAgICBzdGF0aWMgYm9vbCBtZW1vcnlGdWxsOwotICAgIHN0YXRpYyB2b2lk
IHJlcG9ydE91dE9mTWVtb3J5VG9BbGxFeGVjU3RhdGVzKCk7CisgICAgdm9pZCByZWNvcmRFeHRy
YUNvc3Qoc2l6ZV90KTsKKyAgICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKCk7CisgICAgdm9p
ZCBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHlJbnRlcm5hbCgpOworICAgIHZvaWQgbWFy
a1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KCk7CisgICAgdm9pZCBtYXJrU3RhY2tPYmplY3Rz
Q29uc2VydmF0aXZlbHkodm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CisKKyAgICBib29sIG1lbW9y
eUZ1bGw7CisgICAgdm9pZCByZXBvcnRPdXRPZk1lbW9yeVRvQWxsRXhlY1N0YXRlcygpOworCisg
ICAgQ29sbGVjdG9ySGVhcCBwcmltYXJ5SGVhcDsKKyAgICBDb2xsZWN0b3JIZWFwIG51bWJlckhl
YXA7CisgICAgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gcHJvdGVjdGVkVmFsdWVzOworICAgIEhh
c2hTZXQ8TGlzdCo+IG1fbWFya0xpc3RTZXQ7CiAgIH07CiAKICAgLy8gdHVuYWJsZSBwYXJhbWV0
ZXJzCkBAIC0xNDUsNyArMTY4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdWludDMyX3QgdXNl
ZENlbGxzOwogICAgIENvbGxlY3RvckNlbGwqIGZyZWVMaXN0OwogICAgIENvbGxlY3RvckJpdG1h
cCBtYXJrZWQ7Ci0gICAgQ29sbGVjdG9yQml0bWFwIGNvbGxlY3RPbk1haW5UaHJlYWRPbmx5Owor
ICAgIEhlYXAqIGhlYXA7CiAgIH07CiAKICAgY2xhc3MgU21hbGxDZWxsQ29sbGVjdG9yQmxvY2sg
ewpAQCAtMTU0LDUwICsxNzcsMzUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdWludDMyX3QgdXNl
ZENlbGxzOwogICAgIFNtYWxsQ29sbGVjdG9yQ2VsbCogZnJlZUxpc3Q7CiAgICAgQ29sbGVjdG9y
Qml0bWFwIG1hcmtlZDsKLSAgICBDb2xsZWN0b3JCaXRtYXAgY29sbGVjdE9uTWFpblRocmVhZE9u
bHk7Ci0gIH07Ci0KLSAgZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRpb24sIEFs
bG9jYXRpb24sIENvbGxlY3Rpb24gfTsKLQotICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7Ci0gICAg
Q29sbGVjdG9yQmxvY2sqKiBibG9ja3M7Ci0gICAgc2l6ZV90IG51bUJsb2NrczsKLSAgICBzaXpl
X3QgdXNlZEJsb2NrczsKLSAgICBzaXplX3QgZmlyc3RCbG9ja1dpdGhQb3NzaWJsZVNwYWNlOwot
Ci0gICAgc2l6ZV90IG51bUxpdmVPYmplY3RzOwotICAgIHNpemVfdCBudW1MaXZlT2JqZWN0c0F0
TGFzdENvbGxlY3Q7Ci0gICAgc2l6ZV90IGV4dHJhQ29zdDsKLQotICAgIE9wZXJhdGlvbkluUHJv
Z3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzczsKKyAgICBIZWFwKiBoZWFwOwogICB9OwogCi0gIGlu
bGluZSBjb25zdCBDb2xsZWN0b3JCbG9jayogQ29sbGVjdG9yOjpjZWxsQmxvY2soY29uc3QgSlND
ZWxsKiBjZWxsKQorICBpbmxpbmUgY29uc3QgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmNlbGxCbG9j
ayhjb25zdCBKU0NlbGwqIGNlbGwpCiAgIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBDb2xsZWN0b3JCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAm
IEJMT0NLX01BU0spOwogICB9CiAKLSAgaW5saW5lIENvbGxlY3RvckJsb2NrKiBDb2xsZWN0b3I6
OmNlbGxCbG9jayhKU0NlbGwqIGNlbGwpCisgIGlubGluZSBDb2xsZWN0b3JCbG9jayogSGVhcDo6
Y2VsbEJsb2NrKEpTQ2VsbCogY2VsbCkKICAgewogICAgIHJldHVybiBjb25zdF9jYXN0PENvbGxl
Y3RvckJsb2NrKj4oY2VsbEJsb2NrKGNvbnN0X2Nhc3Q8Y29uc3QgSlNDZWxsKj4oY2VsbCkpKTsK
ICAgfQogCi0gIGlubGluZSBzaXplX3QgQ29sbGVjdG9yOjpjZWxsT2Zmc2V0KGNvbnN0IEpTQ2Vs
bCogY2VsbCkKKyAgaW5saW5lIHNpemVfdCBIZWFwOjpjZWxsT2Zmc2V0KGNvbnN0IEpTQ2VsbCog
Y2VsbCkKICAgewogICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwp
ICYgQkxPQ0tfT0ZGU0VUX01BU0spIC8gQ0VMTF9TSVpFOwogICB9CiAKLSAgaW5saW5lIGJvb2wg
Q29sbGVjdG9yOjppc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKiBjZWxsKQorICBpbmxpbmUgYm9v
bCBIZWFwOjppc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKiBjZWxsKQogICB7CiAgICAgcmV0dXJu
IGNlbGxCbG9jayhjZWxsKS0+bWFya2VkLmdldChjZWxsT2Zmc2V0KGNlbGwpKTsKICAgfQogCi0g
IGlubGluZSB2b2lkIENvbGxlY3Rvcjo6bWFya0NlbGwoSlNDZWxsKiBjZWxsKQorICBpbmxpbmUg
dm9pZCBIZWFwOjptYXJrQ2VsbChKU0NlbGwqIGNlbGwpCiAgIHsKICAgICBjZWxsQmxvY2soY2Vs
bCktPm1hcmtlZC5zZXQoY2VsbE9mZnNldChjZWxsKSk7CiAgIH0KIAotICBpbmxpbmUgdm9pZCBD
b2xsZWN0b3I6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKKyAgaW5saW5lIHZv
aWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQogICB7IAogICAgIGlm
IChjb3N0ID4gbWluRXh0cmFDb3N0U2l6ZSkgCiAgICAgICByZWNvcmRFeHRyYUNvc3QoY29zdCAv
IChDRUxMX1NJWkUgKiAyKSk7IApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCShy
ZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2Nh
bGVEYXRlKEV4ZWNTdGF0CiAKIGVudW0gTG9jYWxlRGF0ZVRpbWVGb3JtYXQgeyBMb2NhbGVEYXRl
QW5kVGltZSwgTG9jYWxlRGF0ZSwgTG9jYWxlVGltZSB9OwogIAotc3RhdGljIEpTQ2VsbCogZm9y
bWF0TG9jYWxlRGF0ZShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgZ2R0LCBjb25zdCBMb2NhbGVE
YXRlVGltZUZvcm1hdCBmb3JtYXQpCitzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIGdkdCwgY29uc3QgTG9jYWxl
RGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmb3JtYXRT
dHJpbmdzW10gPSB7IiUjYyIsICIlI3giLCAiJVgifTsKICAKQEAgLTE4OCw3ICsxODgsNyBAQCBz
dGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKGNvbnN0IEdyCiAgICAgc2l6ZV90IHJldCA9
IHN0cmZ0aW1lKHRpbWVidWZmZXIsIGJ1ZnNpemUsIGZvcm1hdFN0cmluZ3NbZm9ybWF0XSwgJmxv
Y2FsVE0pOwogIAogICAgIGlmICggcmV0ID09IDAgKQotICAgICAgICByZXR1cm4ganNTdHJpbmco
IiIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIiIpOwogIAogICAgIC8vIENvcHkg
b3JpZ2luYWwgaW50byB0aGUgYnVmZmVyCiAgICAgaWYgKHllYXJOZWVkc09mZnNldCAmJiBmb3Jt
YXQgIT0gTG9jYWxlVGltZSkgewpAQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBKU0NlbGwqIGZv
cm1hdExvY2FsZURhdGUoY29uc3QgR3IKICAgICAgICAgc3RybmNweSh5ZWFyTG9jYXRpb24sIHll
YXJTdHJpbmcsIHllYXJMZW4gLSAxKTsKICAgICB9CiAgCi0gICAgcmV0dXJuIGpzU3RyaW5nKHRp
bWVidWZmZXIpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0aW1lYnVmZmVyKTsKIH0KIAog
I2VuZGlmIC8vIFBMQVRGT1JNKFdJTl9PUykKQEAgLTQ2OSwxMCArNDY5LDEwIEBAIGNvbnN0IENs
YXNzSW5mbyBEYXRlUHJvdG90eXBlOjppbmZvID0geyIKICovCiAvLyBFQ01BIDE1LjkuNAogCi1E
YXRlUHJvdG90eXBlOjpEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSAqLCBPYmplY3RQcm90b3R5cGUg
Km9iamVjdFByb3RvKQorRGF0ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIE9iamVjdFByb3RvdHlwZSAqb2JqZWN0UHJvdG8pCiAgIDogRGF0ZUluc3RhbmNlKG9iamVj
dFByb3RvKQogewotICAgIHNldEludGVybmFsVmFsdWUoanNOYU4oKSk7CisgICAgc2V0SW50ZXJu
YWxWYWx1ZShqc05hTihleGVjKSk7CiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRk
ZWQgbGF0ZXIsIGFmdGVyIERhdGVPYmplY3RJbXAgaGFzIGJlZW4gYnVpbHQuCiB9CiAKQEAgLTQ4
OSw5ICs0ODksOSBAQCBEYXRlT2JqZWN0SW1wOjpEYXRlT2JqZWN0SW1wKEV4ZWNTdGF0ZSogCiAg
IDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIGRhdGVQcm90by0+Y2xhc3NJbmZvKCkt
PmNsYXNzTmFtZSkKIHsKICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIGRhdGVQcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7Ci0gIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBEYXRlT2JqZWN0RnVuY0ltcChleGVjLCBmdW5jUHJvdG8sIERhdGVPYmpl
Y3RGdW5jSW1wOjpQYXJzZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBhcnNlKSwgRG9udEVu
dW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgRGF0ZU9iamVjdEZ1bmNJbXAoZXhlYywgZnVu
Y1Byb3RvLCBEYXRlT2JqZWN0RnVuY0ltcDo6VVRDLCA3LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
VVRDKSwgRG9udEVudW0pOwotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwgNywgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyAoZXhlYykgRGF0ZU9iamVjdEZ1bmNJbXAoZXhlYywgZnVuY1Byb3RvLCBEYXRlT2JqZWN0
RnVuY0ltcDo6UGFyc2UsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wYXJzZSksIERvbnRFbnVt
KTsKKyAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBEYXRlT2JqZWN0RnVuY0ltcChleGVj
LCBmdW5jUHJvdG8sIERhdGVPYmplY3RGdW5jSW1wOjpVVEMsIDcsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5VVEMpLCBEb250RW51bSk7CisgIHB1dERpcmVjdChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCA3LCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKIH0KIAogYm9v
bCBEYXRlT2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKQEAgLTU0MiwxOSAr
NTQyLDE5IEBAIEpTT2JqZWN0ICpEYXRlT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1MKICAgICB9
CiAgIH0KICAgCi0gIERhdGVJbnN0YW5jZSAqcmV0ID0gbmV3IERhdGVJbnN0YW5jZShleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVQcm90b3R5cGUoKSk7Ci0gIHJldC0+c2V0SW50ZXJu
YWxWYWx1ZShqc051bWJlcih0aW1lQ2xpcCh2YWx1ZSkpKTsKKyAgRGF0ZUluc3RhbmNlKiByZXQg
PSBuZXcgKGV4ZWMpIERhdGVJbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRh
dGVQcm90b3R5cGUoKSk7CisgIHJldC0+c2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcihleGVjLCB0
aW1lQ2xpcCh2YWx1ZSkpKTsKICAgcmV0dXJuIHJldDsKIH0KIAogLy8gRUNNQSAxNS45LjIKLUpT
VmFsdWUgKkRhdGVPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqIC8qZXhlYyov
LCBKU09iamVjdCAqIC8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKK0pTVmFsdWUq
IERhdGVPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IC8qdGhpc09iaiovLCBjb25zdCBMaXN0JiAvKmFyZ3MqLykKIHsKICAgICB0aW1lX3QgbG9jYWxU
aW1lID0gdGltZSgwKTsKICAgICB0bSBsb2NhbFRNOwogICAgIGdldExvY2FsVGltZSgmbG9jYWxU
aW1lLCAmbG9jYWxUTSk7CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdHMobG9jYWxUTSk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKGZvcm1hdERhdGUodHMpICsgIiAiICsgZm9ybWF0VGltZSh0cywgZmFs
c2UpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0cykgKyAiICIgKyBm
b3JtYXRUaW1lKHRzLCBmYWxzZSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRGF0ZU9iamVjdEZ1bmNJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
NTYyLDE0ICs1NjIsMTQgQEAgSlNWYWx1ZSAqRGF0ZU9iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24o
RQogRGF0ZU9iamVjdEZ1bmNJbXA6OkRhdGVPYmplY3RGdW5jSW1wKEV4ZWNTdGF0ZSogZXhlYywg
RnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50
aWZpZXImIG5hbWUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bywgbmFtZSks
IGlkKGkpCiB7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGxl
biwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250
RW51bSk7CiB9CiAKIC8vIEVDTUEgMTUuOS40LjIgLSAzCiBKU1ZhbHVlICpEYXRlT2JqZWN0RnVu
Y0ltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExp
c3QmIGFyZ3MpCiB7CiAgIGlmIChpZCA9PSBQYXJzZSkgewotICAgIHJldHVybiBqc051bWJlcihw
YXJzZURhdGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgcGFyc2VEYXRlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiAgIH0KICAgZWxzZSB7
IC8vIFVUQwogICAgIGludCBuID0gYXJncy5zaXplKCk7CkBAIC01ODAsNyArNTgwLDcgQEAgSlNW
YWx1ZSAqRGF0ZU9iamVjdEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aQogICAgICAgICB8fCAobiA+PSA1
ICYmIGlzbmFuKGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpKSkKICAgICAgICAgfHwgKG4gPj0gNiAm
JiBpc25hbihhcmdzWzVdLT50b051bWJlcihleGVjKSkpCiAgICAgICAgIHx8IChuID49IDcgJiYg
aXNuYW4oYXJnc1s2XS0+dG9OdW1iZXIoZXhlYykpKSkgewotICAgICAgcmV0dXJuIGpzTmFOKCk7
CisgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAgICAgfQogCiAgICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKQEAgLTU5Miw3ICs1OTIsNyBAQCBKU1ZhbHVlICpEYXRlT2JqZWN0RnVuY0ltcDo6Y2Fs
bEFzRnVuY3RpCiAgICAgdC5taW51dGUgPSBhcmdzWzRdLT50b0ludDMyKGV4ZWMpOwogICAgIHQu
c2Vjb25kID0gYXJnc1s1XS0+dG9JbnQzMihleGVjKTsKICAgICBkb3VibGUgbXMgPSAobiA+PSA3
KSA/IGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpIDogMDsKLSAgICByZXR1cm4ganNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB0cnVlKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdHJ1ZSkpOwogICB9CiB9CiAKQEAgLTk4
NywxMSArOTg3LDExIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUK
ICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3Vi
bGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAg
ICAgICByZXR1cm4ganNTdHJpbmcoIkludmFsaWQgRGF0ZSIpOworICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsK
ICAgICB0aGlzRGF0ZU9iai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwot
ICAgIHJldHVybiBqc1N0cmluZyhmb3JtYXREYXRlKHQpICsgIiAiICsgZm9ybWF0VGltZSh0LCB1
dGMpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0KSArICIgIiArIGZv
cm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTEw
MDUsMTEgKzEwMDUsMTEgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNT
dAogICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRv
dWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxsaSkpCi0g
ICAgICAgIHJldHVybiBqc1N0cmluZygiSW52YWxpZCBEYXRlIik7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0
OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGZvcm1hdERhdGVVVENWYXJpYW50KHQpICsgIiAiICsgZm9y
bWF0VGltZSh0LCB1dGMpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZVVU
Q1ZhcmlhbnQodCkgKyAiICIgKyBmb3JtYXRUaW1lKHQsIHV0YykpOwogfQogCiBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmKQpAQCAtMTAyMywxMSArMTAyMywxMSBAQCBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5p
bnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAg
ICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJJbnZhbGlkIERh
dGUiKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKIAog
ICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5E
YXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNTdHJpbmcoZm9ybWF0RGF0ZSh0
KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUodCkpOwogfQogCiBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAtMTA0MSwxMSArMTA0MSwxMSBAQCBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRl
T2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhl
Yyk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJJbnZh
bGlkIERhdGUiKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUi
KTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVn
b3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNTdHJpbmcoZm9ybWF0
VGltZSh0LCB1dGMpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0VGltZSh0LCB1
dGMpKTsKIH0KIAogSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC0xMDU3LDEx
ICsxMDU3LDExIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGUKICAg
ICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUg
bWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoIkludmFsaWQgRGF0ZSIpOworICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGRvdWJs
ZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5n
KGZvcm1hdExvY2FsZURhdGUoZXhlYywgc2VjcywgdHJ1ZSwgdHJ1ZSwgYXJncykpOworICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHNlY3MsIHRydWUsIHRy
dWUsIGFyZ3MpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFyZ3MpOwogCkBAIC0xMDY5LDcg
KzEwNjksNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlCiAKICAg
ICBHcmVnb3JpYW5EYXRlVGltZSB0OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0
ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUodCwgTG9j
YWxlRGF0ZUFuZFRpbWUpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHQsIExv
Y2FsZURhdGVBbmRUaW1lKTsKICNlbmRpZgogfQogCkBAIC0xMDgyLDExICsxMDgyLDExIEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcKICAgICBKU1ZhbHVlKiB2ID0g
dGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051
bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoIkludmFsaWQgRGF0ZSIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIkludmFs
aWQgRGF0ZSIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGRvdWJsZSBzZWNzID0gZmxvb3Io
bWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGZvcm1hdExvY2FsZURh
dGUoZXhlYywgc2VjcywgdHJ1ZSwgZmFsc2UsIGFyZ3MpKTsKKyAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgZm9ybWF0TG9jYWxlRGF0ZShleGVjLCBzZWNzLCB0cnVlLCBmYWxzZSwgYXJncykpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYXJncyk7CiAKQEAgLTEwOTQsNyArMTA5NCw3IEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcKIAogICAgIEdyZWdvcmlhbkRh
dGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwg
dXRjLCB0KTsKLSAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZSh0LCBMb2NhbGVEYXRlKTsKKyAg
ICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0LCBMb2NhbGVEYXRlKTsKICNlbmRpZgog
fQogCkBAIC0xMTA3LDExICsxMTA3LDExIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVRpbWVTdHJpbmcKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUo
KTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4o
bWlsbGkpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoIkludmFsaWQgRGF0ZSIpOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKGZvcm1hdExvY2FsZURhdGUoZXhlYywgc2VjcywgZmFsc2UsIHRydWUs
IGFyZ3MpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0TG9jYWxlRGF0ZShleGVj
LCBzZWNzLCBmYWxzZSwgdHJ1ZSwgYXJncykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYXJn
cyk7CiAKQEAgLTExMTksNyArMTExOSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVRpbWVTdHJpbmcKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmot
Pm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4gZm9ybWF0
TG9jYWxlRGF0ZSh0LCBMb2NhbGVUaW1lKTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShl
eGVjLCB0LCBMb2NhbGVUaW1lKTsKICNlbmRpZgogfQogCkBAIC0xMTMyLDkgKzExMzIsOSBAQCBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqCiAgICAgSlNWYWx1ZSogdiA9
IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9O
dW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFO
KCk7CisgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKIAotICAgIHJldHVybiBqc051bWJlciht
aWxsaSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKIH0KIAogSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYpCkBAIC0xMTQ2LDkgKzExNDYsOSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0VGltZShFeGVjU3RhdGUqCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5h
bFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYg
KGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKIAotICAgIHJldHVybiBqc051bWJlcihtaWxsaSk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIG1pbGxpKTsKIH0KIAogSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldEZ1bGxZ
ZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAt
MTE2MiwxMSArMTE2MiwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhl
Y1N0CiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAg
ZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkK
LSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKIAog
ICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5E
YXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNOdW1iZXIoMTkwMCArIHQueWVh
cik7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCiBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC0xMTgwLDExICsxMTgwLDExIEBAIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGUKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0Rh
dGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihl
eGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKICAg
ICB0aGlzRGF0ZU9iai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwotICAg
IHJldHVybiBqc051bWJlcigxOTAwICsgdC55ZWFyKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgMTkwMCArIHQueWVhcik7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTEx
OTgsMTEgKzExOTgsMTEgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNT
dAogICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRv
dWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxsaSkpCi0g
ICAgICAgIHJldHVybiBqc1N0cmluZygiSW52YWxpZCBEYXRlIik7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0
OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGZvcm1hdERhdGVVVENWYXJpYW50KHQpICsgIiAiICsgZm9y
bWF0VGltZSh0LCB1dGMpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZVVU
Q1ZhcmlhbnQodCkgKyAiICIgKyBmb3JtYXRUaW1lKHQsIHV0YykpOwogfQogCiBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jR2V0TW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYpCkBAIC0xMjE2LDExICsxMjE2LDExIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNHZXRNb250aChFeGVjU3RhdGUKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVy
bmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBp
ZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICAgICAgcmV0dXJu
IGpzTmFOKGV4ZWMpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKICAgICB0aGlzRGF0ZU9i
ai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwotICAgIHJldHVybiBqc051
bWJlcih0Lm1vbnRoKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAK
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTEyMzQsMTEgKzEyMzQsMTEgQEAgSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdAogICAgIEpTVmFsdWUqIHYgPSB0aGlz
RGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVy
KGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxsaSkpCi0gICAgICAgIHJldHVybiBqc05hTigpOwor
ICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0Owog
ICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0g
ICAgcmV0dXJuIGpzTnVtYmVyKHQubW9udGgpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCB0
Lm1vbnRoKTsKIH0KIAogSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC0xMjUyLDExICsxMjUyLDEx
IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSoKICAgICBKU1ZhbHVl
KiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2
LT50b051bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4g
anNOYU4oKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgR3JlZ29yaWFuRGF0
ZVRpbWUgdDsKICAgICB0aGlzRGF0ZU9iai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1
dGMsIHQpOwotICAgIHJldHVybiBqc051bWJlcih0Lm1vbnRoRGF5KTsKKyAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgdC5tb250aERheSk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRV
VENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpA
QCAtMTI3MCwxMSArMTI3MCwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShF
eGVjU3RhCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAg
ICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKG1pbGxp
KSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBqc05hTihleGVjKTsK
IAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3Jp
YW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNOdW1iZXIodC5tb250aERh
eSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOwogfQogCiBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmKQpAQCAtMTI4OCwxMSArMTI4OCwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jR2V0RGF5KEV4ZWNTdGF0ZSogCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRl
cm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAg
aWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVy
biBqc05hTihleGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVP
YmotPm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNO
dW1iZXIodC53ZWVrRGF5KTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC53ZWVrRGF5KTsK
IH0KIAogSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTEzMDYsMTEgKzEzMDYsMTEgQEAgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdAogICAgIEpTVmFsdWUqIHYgPSB0
aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVt
YmVyKGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxsaSkpCi0gICAgICAgIHJldHVybiBqc05hTigp
OworICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0
OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7
Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHQud2Vla0RheSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIHQud2Vla0RheSk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTEzMjQsMTEg
KzEzMjQsMTEgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZQogICAg
IEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRvdWJsZSBt
aWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxsaSkpCi0gICAgICAg
IHJldHVybiBqc05hTigpOworICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKICAgICBHcmVn
b3JpYW5EYXRlVGltZSB0OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUo
bWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHQuaG91cik7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIHQuaG91cik7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRV
VENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikK
QEAgLTEzNDIsMTEgKzEzNDIsMTEgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJz
KEV4ZWNTdAogICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwog
ICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChpc25hbihtaWxs
aSkpCi0gICAgICAgIHJldHVybiBqc05hTigpOworICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7
CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwogICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29y
aWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHQuaG91cik7
CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuaG91cik7CiB9CiAKIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmKQpAQCAtMTM2MCwxMSArMTM2MCwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0TWludXRlcyhFeGVjU3RhCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5h
bFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYg
KGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmot
Pm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNOdW1i
ZXIodC5taW51dGUpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1pbnV0ZSk7CiB9CiAK
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAtMTM3OCwxMSArMTM3OCwxMSBAQCBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjCiAgICAgSlNWYWx1ZSogdiA9IHRo
aXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7
CisgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7
CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsK
LSAgICByZXR1cm4ganNOdW1iZXIodC5taW51dGUpOworICAgIHJldHVybiBqc051bWJlcihleGVj
LCB0Lm1pbnV0ZSk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAtMTM5NiwxMSAr
MTM5NiwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhCiAgICAg
SlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1p
bGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAg
cmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKIAogICAgIEdyZWdv
cmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5EYXRlVGltZSht
aWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNOdW1iZXIodC5zZWNvbmQpOworICAgIHJldHVy
biBqc051bWJlcihleGVjLCB0LnNlY29uZCk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmKQpAQCAtMTQxNCwxMSArMTQxNCwxMSBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRD
U2Vjb25kcyhFeGVjCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVl
KCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFu
KG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgICAgIHJldHVybiBqc05hTihl
eGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgdGhpc0RhdGVPYmotPm1zVG9H
cmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLSAgICByZXR1cm4ganNOdW1iZXIodC5z
ZWNvbmQpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LnNlY29uZCk7CiB9CiAKIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC0xNDMwLDExICsxNDMwLDExIEBAIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXgKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0Rh
dGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihl
eGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxs
aSAvIG1zUGVyU2Vjb25kKTsKICAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNl
Y29uZDsKLSAgICByZXR1cm4ganNOdW1iZXIobXMpOworICAgIHJldHVybiBqc051bWJlcihleGVj
LCBtcyk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC0xNDQ2LDEx
ICsxNDQ2LDExIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMKICAg
ICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUg
bWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAg
ICByZXR1cm4ganNOYU4oKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgZG91
YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKICAgICBkb3VibGUgbXMgPSBt
aWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLSAgICByZXR1cm4ganNOdW1iZXIobXMpOworICAg
IHJldHVybiBqc051bWJlcihleGVjLCBtcyk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JikKQEAgLTE0NjQsMTEgKzE0NjQsMTEgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dl
dFRpbWV6b25lT2Zmc2V0KAogICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxW
YWx1ZSgpOwogICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChp
c25hbihtaWxsaSkpCi0gICAgICAgIHJldHVybiBqc05hTigpOworICAgICAgICByZXR1cm4ganNO
YU4oZXhlYyk7CiAKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwogICAgIHRoaXNEYXRlT2JqLT5t
c1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGpzTnVtYmVy
KC1nbXRvZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIC1nbXRvZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CiB9CiAKIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IExpc3QmIGFyZ3MpCkBAIC0xNDc5LDcgKzE0NzksNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
U2V0VGltZShFeGVjU3RhdGUqCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRp
Y19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKIAogICAgIGRvdWJsZSBtaWxsaSA9IHRp
bWVDbGlwKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c051bWJlcihtaWxsaSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgbWls
bGkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTE0OTQsNyArMTQ5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXRO
ZXdWYWx1ZUZyb21UaW1lQXJncygKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVj
KTsKICAgICAKICAgICBpZiAoYXJncy5pc0VtcHR5KCkgfHwgaXNuYW4obWlsbGkpKSB7Ci0gICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKCk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1
bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE1MDYsMTIgKzE1MDYsMTIg
QEAgc3RhdGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKAogICAgIHRoaXNEYXRl
T2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIGlucHV0SXNVVEMsIHQpOwogCiAgICAg
aWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNl
LCAmbXMsICZ0KSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNl
dEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9IAog
ICAgIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9N
Uyh0LCBtcywgaW5wdXRJc1VUQykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTE1MjMsNyArMTUyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRl
QXJncygKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRl
SW5zdGFuY2UqPih0aGlzT2JqKTsKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
YU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAgICAgIApAQCAtMTU0NCwxMiArMTU0NCwx
MiBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoCiAgICAgfQogICAg
IAogICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFy
Z3NUb1VzZSwgJm1zLCAmdCkpIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsK
KyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRl
T2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfSAKICAgICAgICAgICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29y
aWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRD
KSk7CiAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTY0Nyw3ICsxNjQ3LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1NldFllYXIoRXhlY1N0YXRlKgogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0
YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAgICAgCiAgICAgaWYgKGFyZ3MuaXNF
bXB0eSgpKSB7IAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldElu
dGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0x
NjcwLDEzICsxNjcwLDEzIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0
ZSoKICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpbnQzMl90IHllYXIgPSBhcmdzWzBdLT50b0lu
dDMyKGV4ZWMsIG9rKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTmFOKCk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAg
ICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAgICAgICAgIAogICAgIHQueWVhciA9ICh5ZWFyID4gOTkgfHwg
eWVhciA8IDApID8geWVhciAtIDE5MDAgOiB5ZWFyOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7CisgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMp
KTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkBAIC0xNjkyLDEzICsxNjkyLDEzIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNHZXRZZWFyKEV4ZWNTdGF0ZSoKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVy
bmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBp
ZiAoaXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICAgICAgcmV0dXJu
IGpzTmFOKGV4ZWMpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKICAgICB0aGlzRGF0ZU9i
ai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwogCiAgICAgLy8gTk9URTog
SUUgcmV0dXJucyB0aGUgZnVsbCB5ZWFyIGV2ZW4gaW4gZ2V0WWVhci4KLSAgICByZXR1cm4ganNO
dW1iZXIodC55ZWFyKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC55ZWFyKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNwcAko
cmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDEwIEBAIEVycm9yUHJvdG90eXBlOjpFcnJvclBy
b3RvdHlwZShFeGVjU3RhdGUKIHsKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRl
ZCBsYXRlciBpbiBFcnJvck9iamVjdEltcCdzIGNvbnN0cnVjdG9yCiAKLSAgICBwdXREaXJlY3Qo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzU3RyaW5nKCJFcnJvciIpLCBEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlLCBqc1N0cmluZygi
VW5rbm93biBlcnJvciIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5uYW1lLCBqc1N0cmluZyhleGVjLCAiRXJyb3IiKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSwganNTdHJpbmcoZXhlYywgIlVu
a25vd24gZXJyb3IiKSwgRG9udEVudW0pOwogCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudG9TdHJpbmcsIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBm
dW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBlcnJv
clByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwogfQogCiBKU1ZhbHVlKiBlcnJvclByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmKQpAQCAtNjUsNyArNjUsNyBAQCBKU1ZhbHVlKiBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0CiAgICAgICAgIC8vIE1vemlsbGEgY29tcGF0aWJsZSBmb3JtYXQKICAgICAgICAgcyAr
PSAiOiAiICsgdi0+dG9TdHJpbmcoZXhlYyk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcocyk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRXJyb3JPYmplY3RJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtNzUsNyArNzUsNyBAQCBFcnJvck9iamVjdEltcDo6RXJyb3JPYmplY3RJbXAoRXhlY1N0
YXRlCiB7CiAgICAgLy8gRUNNQSAxNS4xMS4zLjEgRXJyb3IucHJvdG90eXBlCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJvdG8sIERvbnRFbnVt
fERvbnREZWxldGV8UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMs
IDEpLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIAogYm9vbCBFcnJvck9iamVj
dEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0CkBAIC04NywxMSArODcsMTEgQEAgYm9v
bCBFcnJvck9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdAogSlNPYmplY3QqIEVycm9yT2Jq
ZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewog
ICAgIEpTT2JqZWN0KiBwcm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5lcnJvclByb3RvdHlwZSgpKTsKLSAgICBKU09iamVjdCogaW1wID0g
bmV3IEVycm9ySW5zdGFuY2UocHJvdG8pOworICAgIEpTT2JqZWN0KiBpbXAgPSBuZXcgKGV4ZWMp
IEVycm9ySW5zdGFuY2UocHJvdG8pOwogICAgIEpTT2JqZWN0KiBvYmooaW1wKTsKIAogICAgIGlm
ICghYXJnc1swXS0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgaW1wLT5wdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UsIGpzU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgICAgIGltcC0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdl
LCBqc1N0cmluZyhleGVjLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogCiAgICAgcmV0dXJu
IG9iajsKIH0KQEAgLTEwOCw4ICsxMDgsOCBAQCBKU1ZhbHVlKiBFcnJvck9iamVjdEltcDo6Y2Fs
bEFzRnVuY3Rpb24oCiBOYXRpdmVFcnJvclByb3RvdHlwZTo6TmF0aXZlRXJyb3JQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90bywgY29uc3QgVVN0cmlu
ZyYgbmFtZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKICAgICA6IEpTT2JqZWN0KGVycm9yUHJv
dG8pCiB7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc1N0cmlu
ZyhuYW1lKSwgMCk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdl
LCBqc1N0cmluZyhtZXNzYWdlKSwgMCk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lKSwgMCk7CisgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlLCBqc1N0cmluZyhleGVjLCBtZXNzYWdlKSwgMCk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOYXRpdmVFcnJvckltcCAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjAsNyArMTIwLDcgQEAgTmF0aXZlRXJy
b3JJbXA6Ok5hdGl2ZUVycm9ySW1wKEV4ZWNTdGF0ZQogICAgIDogSW50ZXJuYWxGdW5jdGlvbklt
cChmdW5jUHJvdG8sIElkZW50aWZpZXIocHJvdC0+Z2V0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5uYW1lKS0+Z2V0U3RyaW5nKCkpKQogICAgICwgcHJvdG8ocHJvdCkKIHsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxl
dGV8UmVhZE9ubHl8RG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQorICAgIHB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgRG9udERlbGV0
ZXxSZWFkT25seXxEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CiAgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvLCBEb250RGVsZXRlfFJlYWRPbmx5
fERvbnRFbnVtKTsKIH0KIApAQCAtMTMxLDEwICsxMzEsMTAgQEAgYm9vbCBOYXRpdmVFcnJvcklt
cDo6aW1wbGVtZW50c0NvbnN0cnVjdAogCiBKU09iamVjdCogTmF0aXZlRXJyb3JJbXA6OmNvbnN0
cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgSlNPYmplY3Qq
IGltcCA9IG5ldyBFcnJvckluc3RhbmNlKHByb3RvKTsKKyAgICBKU09iamVjdCogaW1wID0gbmV3
IChleGVjKSBFcnJvckluc3RhbmNlKHByb3RvKTsKICAgICBKU09iamVjdCogb2JqKGltcCk7CiAg
ICAgaWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICBpbXAtPnB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSwganNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykpKTsKKyAgICAgICAgaW1wLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm1l
c3NhZ2UsIGpzU3RyaW5nKGV4ZWMsIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgcmV0
dXJuIG9iajsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzMjc1
NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiwxMCArMTIyLDEwIEBAIEpTVmFsdWUqIEZ1bmN0aW9uSW1wOjpjYWxsZXJHZXR0ZXIoRXhl
Y1MKICAgICByZXR1cm4gY2FsbGluZ0Z1bmN0aW9uOwogfQogCi1KU1ZhbHVlKiBGdW5jdGlvbklt
cDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEZ1bmN0aW9uSW1wOjpsZW5ndGhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnVuY3Rpb25JbXAqIHRoaXNPYmogPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJuIGpzTnVt
YmVyKHRoaXNPYmotPmJvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgIHJldHVybiBqc051
bWJlcihleGVjLCB0aGlzT2JqLT5ib2R5LT5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKIH0KIAogYm9v
bCBGdW5jdGlvbkltcDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xOTksNyAr
MTk5LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uSW1wOjpjb25zdHJ1Y3QoRXhlY1N0YQogICBlbHNl
CiAgICAgcHJvdG8gPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlw
ZSgpOwogCi0gIEpTT2JqZWN0KiBvYmoobmV3IEpTT2JqZWN0KHByb3RvKSk7CisgIEpTT2JqZWN0
KiBvYmoobmV3IChleGVjKSBKU09iamVjdChwcm90bykpOwogCiAgIEpTVmFsdWUqIHJlcyA9IGNh
bGwoZXhlYyxvYmosYXJncyk7CiAKQEAgLTI4OCw3ICsyODgsNyBAQCBBcmd1bWVudHM6OkFyZ3Vt
ZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEZ1CiAgICAgLCBpbmRleFRvTmFtZU1hcChmdW5jLCBhcmdz
KQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlLCBmdW5jLCBE
b250RW51bSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGFy
Z3Muc2l6ZSgpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgsIGFyZ3Muc2l6ZSgpLCBEb250RW51bSk7CiAgIAogICAgIGludCBpID0g
MDsKICAgICBMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwpAQCAtNDY0LDcg
KzQ2NCw3IEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWMKICAgICAv
LyBTaW5jZSAiYXJndW1lbnRzIiBpcyBvbmx5IGFjY2Vzc2libGUgd2hpbGUgYSBmdW5jdGlvbiBp
cyBiZWluZyBjYWxsZWQsCiAgICAgLy8gd2UgY2FuIHJldHJpZXZlIG91ciBhcmd1bWVudCBsaXN0
IGZyb20gdGhlIEV4ZWNTdGF0ZSBmb3Igb3VyIGZ1bmN0aW9uIAogICAgIC8vIGNhbGwgaW5zdGVh
ZCBvZiBzdG9yaW5nIHRoZSBsaXN0IG91cnNlbHZlcy4KLSAgICBkKCktPmFyZ3VtZW50c09iamVj
dCA9IG5ldyBBcmd1bWVudHMoZXhlYywgZCgpLT5leGVjLT5mdW5jdGlvbigpLCAqZCgpLT5leGVj
LT5hcmd1bWVudHMoKSwgdGhpcyk7CisgICAgZCgpLT5hcmd1bWVudHNPYmplY3QgPSBuZXcgKGV4
ZWMpIEFyZ3VtZW50cyhleGVjLCBkKCktPmV4ZWMtPmZ1bmN0aW9uKCksICpkKCktPmV4ZWMtPmFy
Z3VtZW50cygpLCB0aGlzKTsKIH0KIAogSlNPYmplY3QqIEFjdGl2YXRpb25JbXA6OnRvVGhpc09i
amVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIEpT
VmFsdWUqIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIAogICAgICAgciArPSB0bXA7CiAgICAgfQog
ICB9Ci0gIHJldHVybiBqc1N0cmluZyhyKTsKKyAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHIpOwog
fQogCiBzdGF0aWMgSlNWYWx1ZSogZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYg
YXJncywgY29uc3QgY2hhciogZG9fbm90X3VuZXNjYXBlLCBib29sIHN0cmljdCkKQEAgLTU3MCw3
ICs1NzAsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAg
aysrOwogICAgIHMuYXBwZW5kKGMpOwogICB9Ci0gIHJldHVybiBqc1N0cmluZyhzKTsKKyAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQogCiBzdGF0aWMgYm9vbCBpc1N0cldoaXRlU3BhY2Uo
dW5zaWduZWQgc2hvcnQgYykKQEAgLTc2NCwxMiArNzY0LDEyIEBAIEpTVmFsdWUqIGdsb2JhbEZ1
bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywKIAogSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIHJldHVy
biBqc051bWJlcihwYXJzZUludChhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9J
bnQzMihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUludChhcmdzWzBd
LT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwogfQogCiBKU1ZhbHVl
KiBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3Qg
TGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIocGFyc2VGbG9hdChhcmdzWzBdLT50
b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUZsb2F0KGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUqIGdsb2JhbEZ1bmNJc05hTihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKQEAgLTg0NCw3ICs4
NDQsNyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAg
IHIgKz0gczsKICAgICB9CiAKLSAgICByZXR1cm4ganNTdHJpbmcocik7CisgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHIpOwogfQogCiBKU1ZhbHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC04NjksNyArODY5LDcg
QEAgSlNWYWx1ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZQogICAgICAgICBzICs9
IFVTdHJpbmcoYywgMSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGpzU3RyaW5nKHMpOworICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTg4OSw3ICs4
ODksNyBAQCBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rpb24oRXhlCiAgICAgLCBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFTU0VSVF9BUkcoZnVuY3Rpb24sIGZ1bmN0aW9u
KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
bGVuKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCBsZW4pLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKIFByb3RvdHlwZUZ1bmN0aW9uOjpQcm90
b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlv
blByb3RvdHlwZSwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNNZW1iZXJGdW5j
dGlvbiBmdW5jdGlvbikKQEAgLTg5Nyw3ICs4OTcsNyBAQCBQcm90b3R5cGVGdW5jdGlvbjo6UHJv
dG90eXBlRnVuY3Rpb24oRXhlCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFT
U0VSVF9BUkcoZnVuY3Rpb24sIGZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcihleGVjLCBsZW4pLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9
CiAKIEpTVmFsdWUqIFByb3RvdHlwZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtOTE0LDcgKzkx
NCw3IEBAIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uOjpQcm90b3R5cGVSZWYKIHsKICAgICBB
U1NFUlRfQVJHKGZ1bmN0aW9uLCBmdW5jdGlvbik7CiAgICAgQVNTRVJUX0FSRyhjYWNoZWRHbG9i
YWxPYmplY3QsIGNhY2hlZEdsb2JhbE9iamVjdCk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGxlbiksIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoZXhlYywgbGVuKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwog
fQogCiBKU1ZhbHVlKiBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCShyZXZpc2lvbiAzMjc1NykK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCwxMSArNDQsMTEgQEAgc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQ2Fs
bChFeAogCiBGdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051
bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAwKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50
b1N0cmluZywgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMiwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9udEVudW0p
OwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCB0aGlz
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKSwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgdGhpcywgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMiwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhp
cywgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCks
IERvbnRFbnVtKTsKIH0KIAogLy8gRUNNQSAxNS4zLjQKQEAgLTcwLDEwICs3MCwxMCBAQCBKU1Zh
bHVlKiBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTCiAKICAgICBpZiAodGhpc09iai0+
aW5oZXJpdHMoJkZ1bmN0aW9uSW1wOjppbmZvKSkgewogICAgICAgICBGdW5jdGlvbkltcCogZmkg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHRoaXNPYmopOwotICAgICAgICByZXR1cm4ganNT
dHJpbmcoImZ1bmN0aW9uICIgKyBmaS0+ZnVuY3Rpb25OYW1lKCkudXN0cmluZygpICsgIigiICsg
ZmktPmJvZHktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgZmktPmJvZHktPnRvU3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmaS0+ZnVuY3Rpb25O
YW1lKCkudXN0cmluZygpICsgIigiICsgZmktPmJvZHktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsg
ZmktPmJvZHktPnRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBqc1N0cmluZygiZnVu
Y3Rpb24gIiArIHN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb25JbXAqPih0aGlzT2JqKS0+ZnVu
Y3Rpb25OYW1lKCkudXN0cmluZygpICsgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiICsgc3RhdGljX2Nhc3Q8SW50ZXJu
YWxGdW5jdGlvbkltcCo+KHRoaXNPYmopLT5mdW5jdGlvbk5hbWUoKS51c3RyaW5nKCkgKyAiKCkg
e1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKTsKIH0KIAogSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1
bmNBcHBseShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBh
cmdzKQpAQCAtMTMzLDcgKzEzMyw3IEBAIEZ1bmN0aW9uT2JqZWN0SW1wOjpGdW5jdGlvbk9iamVj
dEltcChFeGUKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
ZnVuY3Rpb25Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIAog
ICAgIC8vIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7CiB9CiAKIGJvb2wgRnVuY3Rpb25PYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3Qo
KSBjb25zdApAQCAtMTY4LDcgKzE2OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbk9iamVjdEltcDo6
Y29uc3RydWN0KEUKICAgICAvLyBzZW5kIGVtcHR5IHNvdXJjZVVSTCB0byBpbmRpY2F0ZSBjb25z
dHJ1Y3RlZCBjb2RlCiAgICAgRGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoZGJnICYmICFkYmctPnNvdXJjZVBhcnNlZChleGVj
LCBzb3VyY2VJZCwgVVN0cmluZygpLCBib2R5LCBsaW5lTnVtYmVyLCBlcnJMaW5lLCBlcnJNc2cp
KQotICAgICAgICByZXR1cm4gbmV3IEpTT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTT2JqZWN0KCk7CiAKICAgICAvLyBObyBwcm9ncmFtIG5vZGUgPT0gc3ludGF4IGVycm9y
IC0gdGhyb3cgYSBzeW50YXggZXJyb3IKICAgICBpZiAoIWZ1bmN0aW9uQm9keSkKQEAgLTE3OSw3
ICsxNzksNyBAQCBKU09iamVjdCogRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChFCiAgICAg
U2NvcGVDaGFpbiBzY29wZUNoYWluOwogICAgIHNjb3BlQ2hhaW4ucHVzaChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCi0gICAgRnVuY3Rpb25JbXAqIGZpbXAgPSBuZXcgRnVuY3Rpb25J
bXAoZXhlYywgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkJvZHkuZ2V0KCksIHNjb3BlQ2hhaW4pOwor
ICAgIEZ1bmN0aW9uSW1wKiBmaW1wID0gbmV3IChleGVjKSBGdW5jdGlvbkltcChleGVjLCBmdW5j
dGlvbk5hbWUsIGZ1bmN0aW9uQm9keS5nZXQoKSwgc2NvcGVDaGFpbik7CiAKICAgICAvLyBwYXJz
ZSBwYXJhbWV0ZXIgbGlzdC4gdGhyb3cgc3ludGF4IGVycm9yIG9uIGlsbGVnYWwgaWRlbnRpZmll
cnMKICAgICBpbnQgbGVuID0gcC5zaXplKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJ
KHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBVU3RyaW5nIFN0cmluZ0ltcDo6dG9TdHJpbmco
RXhlY1N0YXRlICopCiAKIEpTT2JqZWN0KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0luc3RhbmNlKGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIGNvbnN0X2Nhc3Q8U3RyaW5nSW1w
Kj4odGhpcykpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ0luc3RhbmNlKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIGNvbnN0X2Nhc3Q8U3RyaW5n
SW1wKj4odGhpcykpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVt
YmVySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2ludGVybmFsLmgJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgY2xhc3MgU3RyaW5nSW1wIDogcHVibGljIEpTQ2VsbCB7CiAgIHB1YmxpYzoKLSAgICBTdHJp
bmdJbXAoY29uc3QgVVN0cmluZyYgdikgOiB2YWwodikgeyBDb2xsZWN0b3I6OnJlcG9ydEV4dHJh
TWVtb3J5Q29zdCh2LmNvc3QoKSk7IH0KKyAgICBTdHJpbmdJbXAoY29uc3QgVVN0cmluZyYgdikg
OiB2YWwodikgeyBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qodi5jb3N0
KCkpOyB9CiAgICAgZW51bSBIYXNPdGhlck93bmVyVHlwZSB7IEhhc090aGVyT3duZXIgfTsKICAg
ICBTdHJpbmdJbXAoY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKSA6IHZh
bCh2YWx1ZSkgeyB9CiAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2
YWw7IH0KQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTnVtYmVy
SW1wIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIENvbnN0YW50VmFsdWVzOwot
ICAgIGZyaWVuZCBKU1ZhbHVlICpqc051bWJlckNlbGwoZG91YmxlKTsKKyAgICBmcmllbmQgSlNW
YWx1ZSoganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7CiAgIHB1YmxpYzoKICAgICBk
b3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWw7IH0KIApAQCAtNzgsMTAgKzc4LDExIEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmplY3QgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CiAgICAgCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKQor
ICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgRXhlY1N0YXRlKiBleGVjKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rvcjo6YWxsb2NhdGVOdW1iZXIoc2l6ZSk7CisgICAg
ICAgIHJldHVybiBleGVjLT5oZWFwKCktPmFsbG9jYXRlTnVtYmVyKHNpemUpOwogICAgIH0KKwog
ICBwcml2YXRlOgogICAgIE51bWJlckltcChkb3VibGUgdikgOiB2YWwodikgeyB9CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvbGlzdC5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTAgQEAgdm9pZCBMaXN0OjpnZXRT
bGljZShpbnQgc3RhcnRJbmRleCwgTGlzdAogICAgIHJlc3VsdC5tX3ZlY3Rvci5hcHBlbmRSYW5n
ZShzdGFydCwgZW5kKCkpOwogfQogCi1MaXN0OjpMaXN0U2V0JiBMaXN0OjptYXJrU2V0KCkKK3Zv
aWQgTGlzdDo6bWFya1Byb3RlY3RlZExpc3RzKExpc3RTZXQmIG1hcmtTZXQpCiB7Ci0gICAgc3Rh
dGljIExpc3RTZXQgc3RhdGljTWFya1NldDsKLSAgICByZXR1cm4gc3RhdGljTWFya1NldDsKLX0K
LQotdm9pZCBMaXN0OjptYXJrUHJvdGVjdGVkTGlzdHNTbG93Q2FzZSgpCi17Ci0gICAgTGlzdFNl
dDo6aXRlcmF0b3IgZW5kID0gbWFya1NldCgpLmVuZCgpOwotICAgIGZvciAoTGlzdFNldDo6aXRl
cmF0b3IgaXQgPSBtYXJrU2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgTGlz
dFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKKyAgICBmb3IgKExpc3RTZXQ6Oml0
ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
TGlzdCogbGlzdCA9ICppdDsKIAogICAgICAgICBpdGVyYXRvciBlbmQyID0gbGlzdC0+ZW5kKCk7
CkBAIC02NSw5ICs1OSwxMCBAQCB2b2lkIExpc3Q6OmV4cGFuZEFuZEFwcGVuZChKU1ZhbHVlKiB2
KQogICAgIC8vIHRoZXJlZm9yZSBkb24ndCBuZWVkIGV4cGxpY2l0IG1hcmtpbmcuIE9uY2Ugb3Vy
IHNpemUgZXhjZWVkcwogICAgIC8vIG91ciBWZWN0b3IncyBpbmxpbmUgY2FwYWNpdHksIHRob3Vn
aCwgb3VyIHZhbHVlcyBtb3ZlIHRvIHRoZSAKICAgICAvLyBoZWFwLCB3aGVyZSB0aGV5IGRvIG5l
ZWQgZXhwbGljaXQgbWFya2luZy4KLSAgICBpZiAoIW1faXNJbk1hcmtTZXQpIHsKLSAgICAgICAg
bWFya1NldCgpLmFkZCh0aGlzKTsKLSAgICAgICAgbV9pc0luTWFya1NldCA9IHRydWU7CisgICAg
aWYgKCFtX21hcmtTZXQpIHsKKyAgICAgICAgTGlzdFNldCYgbWFya1NldCA9IEhlYXA6OnRocmVh
ZEhlYXAoKS0+bWFya0xpc3RTZXQoKTsKKyAgICAgICAgbWFya1NldC5hZGQodGhpcyk7CisgICAg
ICAgIG1fbWFya1NldCA9ICZtYXJrU2V0OwogICAgIH0KIAogICAgIG1fdmVjdG9yLnVuY2hlY2tl
ZEFwcGVuZCh2KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuaAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMTQgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7CiAKICAgICAgICAgTGlzdCgpCi0gICAgICAgICAgICA6IG1faXNJbk1h
cmtTZXQoZmFsc2UpCisgICAgICAgICAgICA6IG1fbWFya1NldCgwKQogICAgICAgICB7CiAgICAg
ICAgIH0KIAogICAgICAgICB+TGlzdCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2lz
SW5NYXJrU2V0KQotICAgICAgICAgICAgICAgIG1hcmtTZXQoKS5yZW1vdmUodGhpcyk7CisgICAg
ICAgICAgICBpZiAobV9tYXJrU2V0KQorICAgICAgICAgICAgICAgIG1fbWFya1NldC0+cmVtb3Zl
KHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5zaXplKCk7IH0KQEAgLTg1LDIxICs4NSwxMyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5i
ZWdpbigpOyB9CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmVuZCgpOyB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3Rz
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtYXJrU2V0KCkuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dDYXNl
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3RzKExp
c3RTZXQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBMaXN0U2V0JiBtYXJrU2V0
KCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dDYXNlKCk7Ci0K
ICAgICAgICAgdm9pZCBleHBhbmRBbmRBcHBlbmQoSlNWYWx1ZSopOwogCiAgICAgICAgIFZlY3Rv
clR5cGUgbV92ZWN0b3I7Ci0gICAgICAgIGJvb2wgbV9pc0luTWFya1NldDsKKyAgICAgICAgTGlz
dFNldCogbV9tYXJrU2V0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gUHJvaGliaXRzIG5l
dyAvIGRlbGV0ZSwgd2hpY2ggd291bGQgYnJlYWsgR0MuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvbG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCShy
ZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNyArOTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgcmV0dXJuIGNh
Y2hlZFZhbDsKIAogICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHNsb3Quc3RhdGljRW50
cnkoKTsKLSAgICAgIEpTVmFsdWUqIHZhbCA9IG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBl
bnRyeS0+bGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvblZhbHVlKTsKKyAgICAg
IEpTVmFsdWUqIHZhbCA9IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZW50cnkt
Pmxlbmd0aCwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb25WYWx1ZSk7CiAgICAgICB0aGlz
T2JqLT5wdXREaXJlY3QocHJvcGVydHlOYW1lLCB2YWwsIGVudHJ5LT5hdHRyaWJ1dGVzKTsKICAg
ICAgIHJldHVybiB2YWw7CiAgIH0KQEAgLTIzMiw3ICsyMzIsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgIEFTU0VSVChvYmotPmlzT2JqZWN0KCkpOwogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEpTT2JqZWN0KiA+KG9iaik7CiAgICAgfQotICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSBuZXcg
Q2xhc3NDdG9yKGV4ZWMpOworICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSBuZXcgKGV4ZWMpIENs
YXNzQ3RvcihleGVjKTsKICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChwcm9wZXJ0eU5hbWUs
IG5ld09iamVjdCwgRG9udEVudW0pOwogICAgIHJldHVybiBuZXdPYmplY3Q7CiAgIH0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvbWF0aF9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwyNSArNzYs
MjUgQEAgYm9vbCBNYXRoT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgIHJldHVy
biBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8TWF0aE9iamVjdEltcCwgSlNPYmplY3Q+KGV4ZWMsIEV4
ZWNTdGF0ZTo6bWF0aFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci1KU1ZhbHVlKiBNYXRoT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGlu
dCB0b2tlbikgY29uc3QKK0pTVmFsdWUqIE1hdGhPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0b2tlbikg
ewogICAgIGNhc2UgRXVsZXI6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihleHAoMS4wKSk7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBleHAoMS4wKSk7CiAgICAgY2FzZSBMbjI6Ci0g
ICAgICAgIHJldHVybiBqc051bWJlcihsb2coMi4wKSk7CisgICAgICAgIHJldHVybiBqc051bWJl
cihleGVjLCBsb2coMi4wKSk7CiAgICAgY2FzZSBMbjEwOgotICAgICAgICByZXR1cm4ganNOdW1i
ZXIobG9nKDEwLjApKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxvZygxMC4wKSk7
CiAgICAgY2FzZSBMb2cyRToKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDEuMCAvIGxvZygyLjAp
KTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDEuMCAvIGxvZygyLjApKTsKICAgICBj
YXNlIExvZzEwRToKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDEuMCAvIGxvZygxMC4wKSk7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCAxLjAgLyBsb2coMTAuMCkpOwogICAgIGNhc2Ug
UGk6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihwaURvdWJsZSk7CisgICAgICAgIHJldHVybiBq
c051bWJlcihleGVjLCBwaURvdWJsZSk7CiAgICAgY2FzZSBTcXJ0MV8yOgotICAgICAgICByZXR1
cm4ganNOdW1iZXIoc3FydCgwLjUpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNx
cnQoMC41KSk7CiAgICAgY2FzZSBTcXJ0MjoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHNxcnQo
Mi4wKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzcXJ0KDIuMCkpOwogICAgIH0K
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTA2LDU4ICsxMDYsNTggQEAgSlNWYWx1
ZSogTWF0aE9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eQogSlNWYWx1ZSogbWF0aFByb3RvRnVu
Y0FicyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKIHsKICAg
ICBkb3VibGUgYXJnID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0dXJuIHNpZ25i
aXQoYXJnKSA/IGpzTnVtYmVyKC1hcmcpIDoganNOdW1iZXIoYXJnKTsKKyAgICByZXR1cm4gc2ln
bmJpdChhcmcpID8ganNOdW1iZXIoZXhlYywgLWFyZykgOiBqc051bWJlcihleGVjLCBhcmcpOwog
fQogCiBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoYWNvcyhhcmdzWzBd
LT50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBhY29zKGFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2luKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIHJldHVy
biBqc051bWJlcihhc2luKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIGFzaW4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAogSlNWYWx1
ZSogbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExp
c3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGF0YW4oYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXRhbihhcmdzWzBdLT50b051bWJl
cihleGVjKSkpOwogfQogCiBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVy
KGF0YW4yKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSkp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBhdGFuMihhcmdzWzBdLT50b051bWJlcihleGVj
KSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSogbWF0aFByb3RvRnVu
Y0NlaWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAg
ICAgZG91YmxlIGFyZyA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChzaWduYml0
KGFyZykgJiYgYXJnID4gLTEuMCkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0wLjApOwotICAg
IHJldHVybiBqc051bWJlcihjZWlsKGFyZykpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgLTAuMCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGNlaWwoYXJnKSk7CiB9CiAKIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0
IExpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGNvcyhhcmdzWzBdLT50b051bWJl
cihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBjb3MoYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIo
ZXhwKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGV4cChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogfQogCiBKU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7
CiAgICAgZG91YmxlIGFyZyA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChzaWdu
Yml0KGFyZykgJiYgYXJnID09IDAuMCkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0wLjApOwot
ICAgIHJldHVybiBqc051bWJlcihmbG9vcihhcmcpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIC0wLjApOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBmbG9vcihhcmcpKTsKIH0K
IAogSlNWYWx1ZSogbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
Y29uc3QgTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIobG9nKGFyZ3NbMF0tPnRv
TnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxvZyhhcmdzWzBdLT50
b051bWJlcihleGVjKSkpOwogfQogCiBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtMTczLDcgKzE3Myw3IEBA
IEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGUKICAgICAgICAgaWYgKHZh
bCA+IHJlc3VsdCB8fCAodmFsID09IDAgJiYgcmVzdWx0ID09IDAgJiYgIXNpZ25iaXQodmFsKSkp
CiAgICAgICAgICAgICByZXN1bHQgPSB2YWw7CiAgICAgfQotICAgIHJldHVybiBqc051bWJlcihy
ZXN1bHQpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwogfQogCiBKU1ZhbHVl
KiBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0
JiBhcmdzKQpAQCAtMTg5LDcgKzE4OSw3IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNaW4oRXhl
Y1N0YXRlKiBleGUKICAgICAgICAgaWYgKHZhbCA8IHJlc3VsdCB8fCAodmFsID09IDAgJiYgcmVz
dWx0ID09IDAgJiYgc2lnbmJpdCh2YWwpKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsKICAg
ICB9Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIHJlc3VsdCk7CiB9CiAKIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC0yMDAsMTMgKzIwMCwxMyBAQCBK
U1ZhbHVlKiBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlCiAgICAgZG91YmxlIGFyZzIg
PSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAogICAgIGlmIChpc25hbihhcmcyKSkKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKE5hTik7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBO
YU4pOwogICAgIGlmIChpc2luZihhcmcyKSAmJiBmYWJzKGFyZykgPT0gMSkKLSAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKE5hTik7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHBvdyhhcmcsIGFyZzIpKTsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIE5hTik7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHBvdyhhcmcsIGFyZzIpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JhbmRv
bShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKQorSlNWYWx1ZSogbWF0aFByb3Rv
RnVuY1JhbmRvbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpCiB7CiAj
aWYgIVVTRShNVUxUSVBMRV9USFJFQURTKQogICAgIHN0YXRpYyBib29sIGRpZEluaXRSYW5kb207
CkBAIC0yMTYsMzAgKzIxNiwzMCBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNT
dGF0ZSosCiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4ganNOdW1iZXIod3RmX3JhbmRvbSgp
KTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd3RmX3JhbmRvbSgpKTsKIH0KIAogSlNWYWx1
ZSogbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBM
aXN0JiBhcmdzKQogewogICAgIGRvdWJsZSBhcmcgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsK
ICAgICBpZiAoc2lnbmJpdChhcmcpICYmIGFyZyA+PSAtMC41KQotICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKC0wLjApOwotICAgIHJldHVybiBqc051bWJlcihmbG9vcihhcmcgKyAwLjUpKTsKKyAg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCAtMC4wKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgZmxvb3IoYXJnICsgMC41KSk7CiB9CiAKIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTaW4o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKHNpbihhcmdzWzBdLT50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBq
c051bWJlcihleGVjLCBzaW4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAogSlNWYWx1
ZSogbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExp
c3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHNxcnQoYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3FydChhcmdzWzBdLT50b051bWJl
cihleGVjKSkpOwogfQogCiBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBqc051bWJlcih0
YW4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
dGFuKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEtKUwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw4ICszNjAsOCBAQCB2b2lkIE5v
ZGU6OmhhbmRsZUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
LT5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKCFleGNlcHRpb24tPmhh
c1Byb3BlcnR5KGV4ZWMsICJsaW5lIikgJiYgIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywg
InNvdXJjZVVSTCIpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAibGluZSIs
IGpzTnVtYmVyKG1fbGluZSkpOwotICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXQoZXhlYywgInNv
dXJjZVVSTCIsIGpzU3RyaW5nKGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKKyAgICAgICAgICAg
IGV4Y2VwdGlvbi0+cHV0KGV4ZWMsICJsaW5lIiwganNOdW1iZXIoZXhlYywgbV9saW5lKSk7Cisg
ICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAic291cmNlVVJMIiwganNTdHJpbmcoZXhl
YywgY3VycmVudFNvdXJjZVVSTChleGVjKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIERlYnVn
Z2VyKiBkYmcgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CkBAIC00
NTMsMTAgKzQ1MywxMCBAQCBKU1ZhbHVlKiBUcnVlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKikK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlck5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNWYWx1ZSogTnVtYmVyTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlKikKK0pTVmFsdWUqIE51bWJlck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICAvLyBOdW1iZXIgbm9kZXMgYXJlIG9ubHkgY3JlYXRlZCB3aGVuIHRoZSBu
dW1iZXIgY2FuJ3QgZml0IGluIGEgSlNJbW1lZGlhdGUsIHNvIG5vIG5lZWQgdG8gY2hlY2sgYWdh
aW4uCi0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChtX2RvdWJsZSk7CisgICAgcmV0dXJuIGpzTnVt
YmVyQ2VsbChleGVjLCBtX2RvdWJsZSk7CiB9CiAKIGRvdWJsZSBOdW1iZXJOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopCkBAIC01MDIsOSArNTAyLDkgQEAgdWludDMyX3QgSW1tZWRp
YXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGVUbwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1K
U1ZhbHVlKiBTdHJpbmdOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqKQorSlNWYWx1ZSogU3RyaW5n
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc093bmVkU3Ry
aW5nKG1fdmFsdWUpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIG1fdmFsdWUpOwog
fQogCiBkb3VibGUgU3RyaW5nTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKQpAQCAt
ODE5LDcgKzgxOSw3IEBAIEpTVmFsdWUqIEFycmF5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiAK
ICAgICB9CiAKICAgICBpZiAobV9vcHRpb25hbCkKLSAgICAgICAgYXJyYXktPnB1dChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihtX2VsaXNpb24gKyBsZW5ndGgp
KTsKKyAgICAgICAgYXJyYXktPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcihleGVjLCBtX2VsaXNpb24gKyBsZW5ndGgpKTsKIAogICAgIHJldHVybiBhcnJh
eTsKIH0KQEAgLTE1NjYsNyArMTU2Niw3IEBAIEpTVmFsdWUqIFBvc3RJbmNSZXNvbHZlTm9kZTo6
ZXZhbHVhdGUoRXgKICAgICAgICAgICAgIAogICAgICAgICAgICAgSlNPYmplY3QqIGJhc2UgPSAq
aXRlcjsKICAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2Us
IG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgYmFzZS0+cHV0KGV4ZWMs
IG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSkpOworICAgICAgICAgICAg
YmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKGV4ZWMsIHYtPnRvTnVtYmVyKGV4ZWMp
ICsgMSkpOwogICAgICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgIH0KIApAQCAtMTU4Nyw3ICsx
NTg3LDcgQEAgSlNWYWx1ZSogUG9zdEluY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUoRQogCiAgICAg
SlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7CiAg
ICAgSlNWYWx1ZSogdiA9ICgqc2xvdCktPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgKnNsb3QgPSBq
c051bWJlcih2LT50b051bWJlcihleGVjKSArIDEpOworICAgICpzbG90ID0ganNOdW1iZXIoZXhl
Yywgdi0+dG9OdW1iZXIoZXhlYykgKyAxKTsKICAgICByZXR1cm4gdjsKIH0KIApAQCAtMTYyNyw3
ICsxNjI3LDcgQEAgSlNWYWx1ZSogUG9zdERlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShFeAogCiAg
ICAgICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwogICAgICAgICAgICAgSlNWYWx1ZSog
diA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCktPnRvSlNOdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1i
ZXIoZXhlYykgLSAxKSk7CisgICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNO
dW1iZXIoZXhlYywgdi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7CiAgICAgICAgICAgICByZXR1cm4g
djsKICAgICAgICAgfQogCkBAIC0xNjQ4LDcgKzE2NDgsNyBAQCBKU1ZhbHVlKiBQb3N0RGVjTG9j
YWxWYXJOb2RlOjpldmFsdWF0ZShFCiAKICAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5sb2Nh
bFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKICAgICBKU1ZhbHVlKiB2ID0gKCpzbG90KS0+dG9K
U051bWJlcihleGVjKTsKLSAgICAqc2xvdCA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpIC0g
MSk7CisgICAgKnNsb3QgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSAtIDEpOwog
ICAgIHJldHVybiB2OwogfQogCkBAIC0xNjU4LDcgKzE2NTgsNyBAQCBkb3VibGUgUG9zdERlY0xv
Y2FsVmFyTm9kZTo6aW5saW5lRXZhbHVhCiAKICAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5s
b2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKICAgICBkb3VibGUgbiA9ICgqc2xvdCktPnRv
TnVtYmVyKGV4ZWMpOwotICAgICpzbG90ID0ganNOdW1iZXIobiAtIDEpOworICAgICpzbG90ID0g
anNOdW1iZXIoZXhlYywgbiAtIDEpOwogICAgIHJldHVybiBuOwogfQogCkBAIC0xNzEyLDcgKzE3
MTIsNyBAQCBKU1ZhbHVlKiBQb3N0SW5jQnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4CiAgICAgICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgICAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pT
TnVtYmVyKGV4ZWMpOwotICAgICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwganNO
dW1iZXIodjItPnRvTnVtYmVyKGV4ZWMpICsgMSkpOworICAgICAgICBiYXNlLT5wdXQoZXhlYywg
cHJvcGVydHlJbmRleCwganNOdW1iZXIoZXhlYywgdjItPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwog
CiAgICAgICAgIHJldHVybiB2MjsKICAgICB9CkBAIC0xNzIzLDcgKzE3MjMsNyBAQCBKU1ZhbHVl
KiBQb3N0SW5jQnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKIAogICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051bWJlcihleGVjKTsKLSAgICBiYXNl
LT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBqc051bWJlcih2Mi0+dG9OdW1iZXIoZXhlYykgKyAx
KSk7CisgICAgYmFzZS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwganNOdW1iZXIoZXhlYywgdjIt
PnRvTnVtYmVyKGV4ZWMpICsgMSkpOwogICAgIHJldHVybiB2MjsKIH0KIApAQCAtMTc0Myw3ICsx
NzQzLDcgQEAgSlNWYWx1ZSogUG9zdERlY0JyYWNrZXROb2RlOjpldmFsdWF0ZShFeAogICAgICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgICAgIEpTVmFsdWUqIHYyID0gdi0+dG9K
U051bWJlcihleGVjKTsKLSAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIGpz
TnVtYmVyKHYyLT50b051bWJlcihleGVjKSAtIDEpKTsKKyAgICAgICAgYmFzZS0+cHV0KGV4ZWMs
IHByb3BlcnR5SW5kZXgsIGpzTnVtYmVyKGV4ZWMsIHYyLT50b051bWJlcihleGVjKSAtIDEpKTsK
ICAgICAgICAgcmV0dXJuIHYyOwogICAgIH0KIApAQCAtMTc1Myw3ICsxNzUzLDcgQEAgSlNWYWx1
ZSogUG9zdERlY0JyYWNrZXROb2RlOjpldmFsdWF0ZShFeAogICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCiAKICAgICBKU1ZhbHVlKiB2MiA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgYmFz
ZS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4ZWMpIC0g
MSkpOworICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKGV4ZWMsIHYy
LT50b051bWJlcihleGVjKSAtIDEpKTsKICAgICByZXR1cm4gdjI7CiB9CiAKQEAgLTE3NzUsNyAr
MTc3NSw3IEBAIEpTVmFsdWUqIFBvc3RJbmNEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3QKICAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pTTnVtYmVy
KGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBqc051bWJlcih2Mi0+dG9OdW1i
ZXIoZXhlYykgKyAxKSk7CisgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKGV4
ZWMsIHYyLT50b051bWJlcihleGVjKSArIDEpKTsKICAgICByZXR1cm4gdjI7CiB9CiAKQEAgLTE3
OTAsNyArMTc5MCw3IEBAIEpTVmFsdWUqIFBvc3REZWNEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3QK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pT
TnVtYmVyKGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBqc051bWJlcih2Mi0+
dG9OdW1iZXIoZXhlYykgLSAxKSk7CisgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVt
YmVyKGV4ZWMsIHYyLT50b051bWJlcihleGVjKSAtIDEpKTsKICAgICByZXR1cm4gdjI7CiB9CiAK
QEAgLTE5MjcsMzEgKzE5MjcsMzEgQEAgdm9pZCBUeXBlT2ZWYWx1ZU5vZGU6Om9wdGltaXplVmFy
aWFibGVBYwogICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKIH0KIAotc3RhdGlj
IEpTVmFsdWUqIHR5cGVTdHJpbmdGb3JWYWx1ZShKU1ZhbHVlKiB2KSBLSlNfRkFTVF9DQUxMOwot
c3RhdGljIEpTVmFsdWUqIHR5cGVTdHJpbmdGb3JWYWx1ZShKU1ZhbHVlKiB2KQorc3RhdGljIEpT
VmFsdWUqIHR5cGVTdHJpbmdGb3JWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKikgS0pTX0ZBU1Rf
Q0FMTDsKK3N0YXRpYyBKU1ZhbHVlKiB0eXBlU3RyaW5nRm9yVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2KQogewogICAgIHN3aXRjaCAodi0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
VW5kZWZpbmVkVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygidW5kZWZpbmVkIik7
CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgInVuZGVmaW5lZCIpOwogICAgICAg
ICBjYXNlIE51bGxUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJvYmplY3QiKTsK
KyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAib2JqZWN0Iik7CiAgICAgICAgIGNh
c2UgQm9vbGVhblR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoImJvb2xlYW4iKTsK
KyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiYm9vbGVhbiIpOwogICAgICAgICBj
YXNlIE51bWJlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoIm51bWJlciIpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJudW1iZXIiKTsKICAgICAgICAgY2Fz
ZSBTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJzdHJpbmciKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAic3RyaW5nIik7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBpZiAodi0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8v
IFJldHVybiAidW5kZWZpbmVkIiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCiAg
ICAgICAgICAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgogICAgICAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5tYXNxdWVyYWRlQXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQi
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJ1bmRlZmluZWQi
KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5p
bXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoImZ1
bmN0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiZnVu
Y3Rpb24iKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJv
YmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAib2JqZWN0Iik7CiAg
ICAgfQogfQogCkBAIC0xOTY2LDcgKzE5NjYsNyBAQCBKU1ZhbHVlKiBMb2NhbFZhclR5cGVPZk5v
ZGU6OmV2YWx1YXRlKEV4CiB7CiAgICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0g
ZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKIAotICAgIHJldHVybiB0eXBlU3RyaW5nRm9yVmFs
dWUoZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUpOworICAgIHJldHVybiB0eXBl
U3RyaW5nRm9yVmFsdWUoZXhlYywgZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUp
OwogfQogCiBKU1ZhbHVlKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtMTk4NCwxMyArMTk4NCwxMyBAQCBKU1ZhbHVlKiBUeXBlT2ZSZXNvbHZlTm9kZTo6
ZXZhbHVhdGUoRXhlCiAgICAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgaWYgKGJhc2UtPmdl
dFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewogICAgICAgICAgICAgSlNWYWx1
ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHlwZVN0cmluZ0ZvclZhbHVlKHYpOworICAgICAgICAgICAgcmV0dXJuIHR5cGVTdHJp
bmdGb3JWYWx1ZShleGVjLCB2KTsKICAgICAgICAgfQogCiAgICAgICAgICsraXRlcjsKICAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcoInVuZGVmaW5lZCIp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAidW5kZWZpbmVkIik7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwMDAsNyArMjAwMCw3IEBAIEpTVmFsdWUqIFR5cGVP
ZlZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1MKICAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gICAgcmV0dXJuIHR5
cGVTdHJpbmdGb3JWYWx1ZSh2KTsKKyAgICByZXR1cm4gdHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMs
IHYpOwogfQogCiAvLyBFQ01BIDExLjQuNCBhbmQgMTEuNC41CkBAIC0yMDI0LDcgKzIwMjQsNyBA
QCBKU1ZhbHVlKiBQcmVJbmNMb2NhbFZhck5vZGU6OmV2YWx1YXRlKEV4CiAgICAgSlNWYWx1ZSoq
IHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7CiAKICAgICBkb3Vi
bGUgbiA9ICgqc2xvdCktPnRvTnVtYmVyKGV4ZWMpOwotICAgIEpTVmFsdWUqIG4yID0ganNOdW1i
ZXIobiArIDEpOworICAgIEpTVmFsdWUqIG4yID0ganNOdW1iZXIoZXhlYywgbiArIDEpOwogICAg
ICpzbG90ID0gbjI7CiAgICAgcmV0dXJuIG4yOwogfQpAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAgSlNW
YWx1ZSogUHJlSW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQogICAgICAgICAgICAgSlNWYWx1
ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAKICAgICAgICAgICAg
IGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBuMiA9
IGpzTnVtYmVyKG4gKyAxKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIG4yID0ganNOdW1iZXIoZXhl
YywgbiArIDEpOwogICAgICAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIG4yKTsKIAog
ICAgICAgICAgICAgcmV0dXJuIG4yOwpAQCAtMjA3Niw3ICsyMDc2LDcgQEAgSlNWYWx1ZSogUHJl
RGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShFeAogICAgIEpTVmFsdWUqKiBzbG90ID0gJmV4ZWMt
PmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlOwogCiAgICAgZG91YmxlIG4gPSAoKnNsb3Qp
LT50b051bWJlcihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gLSAxKTsKKyAg
ICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKGV4ZWMsIG4gLSAxKTsKICAgICAqc2xvdCA9IG4yOwog
ICAgIHJldHVybiBuMjsKIH0KQEAgLTIwOTksNyArMjA5OSw3IEBAIEpTVmFsdWUqIFByZURlY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwogCiAgICAgICAgICAgICBkb3VibGUgbiA9IHYt
PnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSogbjIgPSBqc051bWJlcihuIC0g
MSk7CisgICAgICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKGV4ZWMsIG4gLSAxKTsKICAg
ICAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBuMik7CiAKICAgICAgICAgICAgIHJl
dHVybiBuMjsKQEAgLTIxMTYsNyArMjExNiw3IEBAIEpTVmFsdWUqIFByZURlY1Jlc29sdmVOb2Rl
OjpldmFsdWF0ZShFeGUKIEpTVmFsdWUqIFByZUluY0NvbnN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMt
PnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmxvY2FsU3Rv
cmFnZSgpW21faW5kZXhdLnZhbHVlLT50b051bWJlcihleGVjKSArIDEpOworICAgIHJldHVybiBq
c051bWJlcihleGVjLCBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1i
ZXIoZXhlYykgKyAxKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBy
ZURlY0NvbnN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTI0
LDcgKzIxMjQsNyBAQCBKU1ZhbHVlKiBQcmVJbmNDb25zdE5vZGU6OmV2YWx1YXRlKEV4ZWNTCiBK
U1ZhbHVlKiBQcmVEZWNDb25zdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9w
KCkpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52
YWx1ZS0+dG9OdW1iZXIoZXhlYykgLSAxKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZXhl
Yy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0SW5jQ29uc3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMzIsNyArMjEzMiw3IEBAIEpT
VmFsdWUqIFByZURlY0NvbnN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1MKIEpTVmFsdWUqIFBvc3RJbmND
b25zdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZXhlYy0+
dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVy
biBqc051bWJlcihleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBleGVjLT5sb2NhbFN0b3JhZ2UoKVtt
X2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUG9zdERlY0NvbnN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0yMTQwLDcgKzIxNDAsNyBAQCBKU1ZhbHVlKiBQb3N0SW5jQ29uc3ROb2Rl
OjpldmFsdWF0ZShFeGVjCiBKU1ZhbHVlKiBQb3N0RGVjQ29uc3ROb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhl
Yy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+bG9jYWxT
dG9yYWdlKClbbV9pbmRleF0udmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeEJy
YWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxNjYsNyAr
MjE2Niw3IEBAIEpTVmFsdWUqIFByZUluY0JyYWNrZXROb2RlOjpldmFsdWF0ZShFeGUKICAgICAg
ICAgSlNWYWx1ZSogdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4
LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gICAgICAgIEpT
VmFsdWUqIG4yID0ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKTsKKyAgICAgICAgSlNW
YWx1ZSogbjIgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSArIDEpOwogICAgICAg
ICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwgbjIpOwogCiAgICAgICAgIHJldHVybiBu
MjsKQEAgLTIxNzcsNyArMjE3Nyw3IEBAIEpTVmFsdWUqIFByZUluY0JyYWNrZXROb2RlOjpldmFs
dWF0ZShFeGUKICAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3BlcnR5TmFt
ZSkgOiBqc1VuZGVmaW5lZCgpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKLSAgICBK
U1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSk7CisgICAgSlNWYWx1
ZSogbjIgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSArIDEpOwogICAgIGJhc2Ut
PnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIG4yKTsKIAogICAgIHJldHVybiBuMjsKQEAgLTIxOTgs
NyArMjE5OCw3IEBAIEpTVmFsdWUqIFByZURlY0JyYWNrZXROb2RlOjpldmFsdWF0ZShFeGUKICAg
ICAgICAgSlNWYWx1ZSogdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUlu
ZGV4LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gICAgICAg
IEpTVmFsdWUqIG4yID0ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKTsKKyAgICAgICAg
SlNWYWx1ZSogbjIgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSAtIDEpOwogICAg
ICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwgbjIpOwogCiAgICAgICAgIHJldHVy
biBuMjsKQEAgLTIyMDksNyArMjIwOSw3IEBAIEpTVmFsdWUqIFByZURlY0JyYWNrZXROb2RlOjpl
dmFsdWF0ZShFeGUKICAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3BlcnR5
TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKLSAg
ICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CisgICAgSlNW
YWx1ZSogbjIgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSAtIDEpOwogICAgIGJh
c2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIG4yKTsKIAogICAgIHJldHVybiBuMjsKQEAgLTIy
MzMsNyArMjIzMyw3IEBAIEpTVmFsdWUqIFByZUluY0RvdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgZG91YmxlIG4gPSB2LT50b051bWJl
cihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gKyAxKTsKKyAgICBKU1ZhbHVl
KiBuMiA9IGpzTnVtYmVyKGV4ZWMsIG4gKyAxKTsKICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVu
dCwgbjIpOwogCiAgICAgcmV0dXJuIG4yOwpAQCAtMjI1MCw3ICsyMjUwLDcgQEAgSlNWYWx1ZSog
UHJlRGVjRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YQogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCiAKICAgICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIEpTVmFsdWUqIG4y
ID0ganNOdW1iZXIobiAtIDEpOworICAgIEpTVmFsdWUqIG4yID0ganNOdW1iZXIoZXhlYywgbiAt
IDEpOwogICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBuMik7CiAKICAgICByZXR1cm4gbjI7
CkBAIC0yMzEyLDcgKzIzMTIsNyBAQCB2b2lkIE5lZ2F0ZU5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoCiBKU1ZhbHVlKiBOZWdhdGVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBleGNlcHRpb24sIGNhbGxlciB3aWxsIGRvIHNvIHJp
Z2h0IGFmdGVyIGV2YWx1YXRlKCkKLSAgICByZXR1cm4ganNOdW1iZXIoLW1fZXhwci0+ZXZhbHVh
dGVUb051bWJlcihleGVjKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIC1tX2V4cHItPmV2
YWx1YXRlVG9OdW1iZXIoZXhlYykpOwogfQogCiBkb3VibGUgTmVnYXRlTm9kZTo6ZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBpbnQzMl90IEJp
dHdpc2VOb3ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvCiAKIEpTVmFsdWUqIEJpdHdpc2VOb3ROb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7CiB9CiAKIGRvdWJsZSBCaXR3aXNlTm90Tm9kZTo6ZXZh
bHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yMzk2LDcgKzIzOTYsNyBAQCBkb3Vi
bGUgTXVsdE5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoCiAKIEpTVmFsdWUqIE11bHROb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGlubGlu
ZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKIH0KIAogZG91YmxlIE11bHROb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTI0MzcsNyArMjQzNyw3IEBAIGRvdWJsZSBE
aXZOb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEUKIAogSlNWYWx1ZSogRGl2Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5saW5lRXZh
bHVhdGVUb051bWJlcihleGVjKSk7CiB9CiAKIGRvdWJsZSBEaXZOb2RlOjpldmFsdWF0ZVRvTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTI0NzIsNyArMjQ3Miw3IEBAIGRvdWJsZSBNb2ROb2Rl
OjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEUKIAogSlNWYWx1ZSogTW9kTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5saW5lRXZhbHVhdGVU
b051bWJlcihleGVjKSk7CiB9CiAKIGRvdWJsZSBNb2ROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYykKQEAgLTI1MjMsMTAgKzI1MjMsMTAgQEAgc3RhdGljIEpTVmFsdWUqIGFk
ZFNsb3dDYXNlKEV4ZWNTdGF0ZSogZQogICAgICAgICBVU3RyaW5nIHZhbHVlID0gcDEtPnRvU3Ry
aW5nKGV4ZWMpICsgcDItPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICBpZiAodmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAg
ICAgICByZXR1cm4ganNTdHJpbmcodmFsdWUpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgdmFsdWUpOwogICAgIH0KIAotICAgIHJldHVybiBqc051bWJlcihwMS0+dG9OdW1iZXIoZXhl
YykgKyBwMi0+dG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBwMS0+
dG9OdW1iZXIoZXhlYykgKyBwMi0+dG9OdW1iZXIoZXhlYykpOwogfQogCiBzdGF0aWMgZG91Ymxl
IGFkZFNsb3dDYXNlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1
ZSogdjIpCkBAIC0yNTYyLDEyICsyNTYyLDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSogYWRk
KEV4ZWNTdGF0ZSogZXgKICAgICBjb25zdCB1bnNpZ25lZCBib3RoVHlwZXMgPSAodDEgPDwgMykg
fCB0MjsKIAogICAgIGlmIChib3RoVHlwZXMgPT0gKChOdW1iZXJUeXBlIDw8IDMpIHwgTnVtYmVy
VHlwZSkpCi0gICAgICAgIHJldHVybiBqc051bWJlcih2MS0+dG9OdW1iZXIoZXhlYykgKyB2Mi0+
dG9OdW1iZXIoZXhlYykpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdjEtPnRvTnVt
YmVyKGV4ZWMpICsgdjItPnRvTnVtYmVyKGV4ZWMpKTsKICAgICBpZiAoYm90aFR5cGVzID09ICgo
U3RyaW5nVHlwZSA8PCAzKSB8IFN0cmluZ1R5cGUpKSB7CiAgICAgICAgIFVTdHJpbmcgdmFsdWUg
PSBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJp
bmdJbXAqPih2MiktPnZhbHVlKCk7CiAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVy
biBqc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0dHkgdW5jb21tb24KQEAg
LTI2NDcsNyArMjY0Nyw3IEBAIGRvdWJsZSBBZGROdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVU
b04KIAogSlNWYWx1ZSogQWRkTnVtYmVyc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwog
fQogCiBkb3VibGUgQWRkTnVtYmVyc05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtMjY3Myw3ICsyNjczLDcgQEAgSlNWYWx1ZSogQWRkU3RyaW5nc05vZGU6OmV2YWx1
YXRlKEV4ZWNTdAogICAgIEpTVmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAotICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNf
Y2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2
MiktPnZhbHVlKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxTdHJp
bmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVl
KCkpOwogfQogCiBKU1ZhbHVlKiBBZGRTdHJpbmdMZWZ0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQpAQCAtMjY4NSw3ICsyNjg1LDcgQEAgSlNWYWx1ZSogQWRkU3RyaW5nTGVmdE5vZGU6
OmV2YWx1YXRlKEV4ZQogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgICBKU1ZhbHVl
KiBwMiA9IHYyLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwotICAgIHJldHVy
biBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBwMi0+dG9T
dHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxTdHJp
bmdJbXAqPih2MSktPnZhbHVlKCkgKyBwMi0+dG9TdHJpbmcoZXhlYykpOwogfQogCiBKU1ZhbHVl
KiBBZGRTdHJpbmdSaWdodE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTI2OTcs
NyArMjY5Nyw3IEBAIEpTVmFsdWUqIEFkZFN0cmluZ1JpZ2h0Tm9kZTo6ZXZhbHVhdGUoRXgKICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9Qcmlt
aXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKLSAgICByZXR1cm4ganNTdHJpbmcocDEtPnRv
U3RyaW5nKGV4ZWMpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1ZSgpKTsKKyAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgcDEtPnRvU3RyaW5nKGV4ZWMpICsgc3RhdGljX2Nhc3Q8
U3RyaW5nSW1wKj4odjIpLT52YWx1ZSgpKTsKIH0KIAogdm9pZCBTdWJOb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC0yNzE3LDcgKzI3MTcsNyBAQCBkb3Vi
bGUgU3ViTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFCiAKIEpTVmFsdWUqIFN1Yk5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlubGlu
ZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwogfQogCiBkb3VibGUgU3ViTm9kZTo6ZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzU0LDcgKzI3NTQsNyBAQCBpbnQzMl90IExl
ZnRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9JCiAKIEpTVmFsdWUqIExlZnRTaGlmdE5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5saW5l
RXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKIH0KIAogZG91YmxlIExlZnRTaGlmdE5vZGU6OmV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjc4OSw3ICsyNzg5LDcgQEAgaW50MzJf
dCBSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUbwogCiBKU1ZhbHVlKiBSaWdodFNoaWZ0
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOwogfQogCiBkb3VibGUgUmlnaHRTaGlmdE5vZGU6
OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjgyNCw3ICsyODI0LDcgQEAg
dWludDMyX3QgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRQogCiBKU1ZhbHVlKiBVbnNp
Z25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYykpOworICAgIHJldHVybiBq
c051bWJlcihleGVjLCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKGV4ZWMpKTsKIH0KIAogZG91Ymxl
IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVj
KQpAQCAtMzI3NSw3ICszMjc1LDcgQEAgaW50MzJfdCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0
ZVRvSW50MwogCiBKU1ZhbHVlKiBCaXRYT3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7CiB9
CiAKIGRvdWJsZSBCaXRYT3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
QEAgLTMzMTQsNyArMzMxNCw3IEBAIGludDMyX3QgQml0T3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRv
SW50MzIKIAogSlNWYWx1ZSogQml0T3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7CiB9CiAK
IGRvdWJsZSBCaXRPck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MzQ0NCw1MSArMzQ0NCw1MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZv
clJlCiAgICAgdW5zaWduZWQgaW50IHVpOwogICAgIHN3aXRjaCAob3BlcikgewogICAgICAgICBj
YXNlIE9wTXVsdEVxOgotICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGN1cnJlbnQtPnRvTnVtYmVy
KGV4ZWMpICogcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgdiA9
IGpzTnVtYmVyKGV4ZWMsIGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpICogcmlnaHQtPmV2YWx1YXRl
VG9OdW1iZXIoZXhlYykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgT3BEaXZF
cToKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihjdXJyZW50LT50b051bWJlcihleGVjKSAvIHJp
Z2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIHYgPSBqc051bWJlcihl
eGVjLCBjdXJyZW50LT50b051bWJlcihleGVjKSAvIHJpZ2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE9wUGx1c0VxOgogICAgICAg
ICAgICAgdiA9IGFkZChleGVjLCBjdXJyZW50LCByaWdodC0+ZXZhbHVhdGUoZXhlYykpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgT3BNaW51c0VxOgotICAgICAgICAgICAgdiA9
IGpzTnVtYmVyKGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpIC0gcmlnaHQtPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYykpOworICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGV4ZWMsIGN1cnJlbnQtPnRvTnVt
YmVyKGV4ZWMpIC0gcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgT3BMU2hpZnQ6CiAgICAgICAgICAgICBpMSA9IGN1cnJlbnQt
PnRvSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIo
ZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1iZXIoaTEgPDwgaTIpOworICAgICAgICAgICAg
diA9IGpzTnVtYmVyKGV4ZWMsIGkxIDw8IGkyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE9wUlNoaWZ0OgogICAgICAgICAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMp
OwogICAgICAgICAgICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAg
ICAgICAgdiA9IGpzTnVtYmVyKGkxID4+IGkyKTsKKyAgICAgICAgICAgIHYgPSBqc051bWJlcihl
eGVjLCBpMSA+PiBpMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBPcFVSU2hp
ZnQ6CiAgICAgICAgICAgICB1aSA9IGN1cnJlbnQtPnRvVUludDMyKGV4ZWMpOwogICAgICAgICAg
ICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpz
TnVtYmVyKHVpID4+IGkyKTsKKyAgICAgICAgICAgIHYgPSBqc051bWJlcihleGVjLCB1aSA+PiBp
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBPcEFuZEVxOgogICAgICAgICAg
ICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwogICAgICAgICAgICAgaTIgPSByaWdodC0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGkxICYgaTIp
OworICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGV4ZWMsIGkxICYgaTIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgT3BYT3JFcToKICAgICAgICAgICAgIGkxID0gY3VycmVudC0+
dG9JbnQzMihleGVjKTsKICAgICAgICAgICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihpMSBeIGkyKTsKKyAgICAgICAgICAgIHYg
PSBqc051bWJlcihleGVjLCBpMSBeIGkyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE9wT3JFcToKICAgICAgICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKICAg
ICAgICAgICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAg
IHYgPSBqc051bWJlcihpMSB8IGkyKTsKKyAgICAgICAgICAgIHYgPSBqc051bWJlcihleGVjLCBp
MSB8IGkyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE9wTW9kRXE6IHsKICAg
ICAgICAgICAgIGRvdWJsZSBkMSA9IGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAg
ICAgZG91YmxlIGQyID0gcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICB2ID0ganNOdW1iZXIoZm1vZChkMSwgZDIpKTsKKyAgICAgICAgICAgIHYgPSBqc051bWJlcihl
eGVjLCBmbW9kKGQxLCBkMikpOwogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTQyNDAsNyArNDI0MCw3IEBAIEpTVmFsdWUqIEZvckluTm9kZTo6ZXhl
Y3V0ZShFeGVjU3RhdGUqIGUKICAgICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1l
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpTVmFsdWUqIHN0ciA9IGpzT3du
ZWRTdHJpbmcobmFtZS51c3RyaW5nKCkpOworICAgICAgICBKU1ZhbHVlKiBzdHIgPSBqc093bmVk
U3RyaW5nKGV4ZWMsIG5hbWUudXN0cmluZygpKTsKIAogICAgICAgICBpZiAobV9sZXhwci0+aXNS
ZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwci5nZXQoKSktPmlkZW50aWZpZXIoKTsKQEAg
LTQ1NjYsNyArNDU2Niw3IEBAIEpTVmFsdWUqIFRyeU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBl
eGUKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX3RyeUJsb2NrLT5leGVjdXRlKGV4ZWMpOwogCiAg
ICAgaWYgKG1fY2F0Y2hCbG9jayAmJiBleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IFRocm93KSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBvYmogPSBuZXcgSlNPYmplY3Q7CisgICAgICAgIEpTT2JqZWN0
KiBvYmogPSBuZXcgKGV4ZWMpIEpTT2JqZWN0OwogICAgICAgICBvYmotPnB1dERpcmVjdChtX2V4
Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxldGUpOwogICAgICAgICBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICAgICAgICBleGVjLT5w
dXNoU2NvcGUob2JqKTsKQEAgLTQ5MjYsMTIgKzQ5MjYsMTIgQEAgdm9pZCBGdW5jRGVjbE5vZGU6
OmFkZFBhcmFtcygpCiAKIEZ1bmN0aW9uSW1wKiBGdW5jRGVjbE5vZGU6Om1ha2VGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgRnVuY3Rpb25JbXAqIGZ1bmMgPSBuZXcgRnVuY3Rpb25J
bXAoZXhlYywgbV9pZGVudCwgbV9ib2R5LmdldCgpLCBleGVjLT5zY29wZUNoYWluKCkpOworICAg
IEZ1bmN0aW9uSW1wKiBmdW5jID0gbmV3IChleGVjKSBGdW5jdGlvbkltcChleGVjLCBtX2lkZW50
LCBtX2JvZHkuZ2V0KCksIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAKICAgICBKU09iamVjdCogcHJv
dG8gPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCktPmNv
bnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgcHJvdG8tPnB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmMsIERvbnRFbnVtKTsKICAgICBm
dW5jLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG8sIERv
bnREZWxldGUpOwotICAgIGZ1bmMtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcihtX2JvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7CisgICAgZnVuYy0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIG1fYm9keS0+cGFyYW1ldGVycygpLnNpemUo
KSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICByZXR1cm4gZnVuYzsK
IH0KIApAQCAtNDk2MCwxMSArNDk2MCwxMSBAQCBKU1ZhbHVlKiBGdW5jRXhwck5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0CiAgICAgICAgIC8vIG5hbWVkIEZ1bmN0aW9uRXhwcmVzc2lvbnMgY2FuIHJl
Y3Vyc2l2ZWx5IGNhbGwgdGhlbXNlbHZlcywKICAgICAgICAgLy8gYnV0IHRoZXkgd29uJ3QgcmVn
aXN0ZXIgd2l0aCB0aGUgY3VycmVudCBzY29wZSBjaGFpbiBhbmQgc2hvdWxkCiAgICAgICAgIC8v
IGJlIGNvbnRhaW5lZCBhcyBzaW5nbGUgcHJvcGVydHkgaW4gYW4gYW5vbnltb3VzIG9iamVjdC4K
LSAgICAgICAgZnVuY3Rpb25TY29wZU9iamVjdCA9IG5ldyBKU09iamVjdDsKKyAgICAgICAgZnVu
Y3Rpb25TY29wZU9iamVjdCA9IG5ldyAoZXhlYykgSlNPYmplY3Q7CiAgICAgICAgIGV4ZWMtPnB1
c2hTY29wZShmdW5jdGlvblNjb3BlT2JqZWN0KTsKICAgICB9CiAKLSAgICBGdW5jdGlvbkltcCog
ZnVuYyA9IG5ldyBGdW5jdGlvbkltcChleGVjLCBtX2lkZW50LCBtX2JvZHkuZ2V0KCksIGV4ZWMt
PnNjb3BlQ2hhaW4oKSk7CisgICAgRnVuY3Rpb25JbXAqIGZ1bmMgPSBuZXcgKGV4ZWMpIEZ1bmN0
aW9uSW1wKGV4ZWMsIG1faWRlbnQsIG1fYm9keS5nZXQoKSwgZXhlYy0+c2NvcGVDaGFpbigpKTsK
ICAgICBKU09iamVjdCogcHJvdG8gPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVj
dENvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAg
cHJvdG8tPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmMs
IERvbnRFbnVtKTsKICAgICBmdW5jLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgcHJvdG8sIERvbnREZWxldGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVy
X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE2ICs1NSwxNiBAQCBzdGF0aWMgSlNW
YWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpCiBOdW1iZXJQcm90b3R5cGU6Ok51bWJlclBy
b3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBl
LCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCiAgICAgOiBOdW1iZXJJbnN0
YW5jZShvYmplY3RQcm90b3R5cGUpCiB7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcigw
KSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcihleGVjLCAwKSk7CiAKICAgICAvLyBU
aGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgTnVtYmVyT2JqZWN0SW1w
IGhhcyBiZWVuIGNvbnN0cnVjdGVkCiAKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b1N0cmluZywgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJv
dG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcsIG51bWJlclBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG51bWJlclByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCwgbnVtYmVy
UHJvdG9GdW5jVG9GaXhlZCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS50b0V4cG9uZW50aWFsLCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKSwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lz
aW9uLCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJv
dG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIG51bWJlclByb3RvRnVu
Y1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZywgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnZhbHVlT2YsIG51bWJlclByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblBy
b3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvRml4ZWQsIG51bWJlclByb3RvRnVu
Y1RvRml4ZWQpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvRXhwb25lbnRpYWwsIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRv
UHJlY2lzaW9uLCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbiksIERvbnRFbnVtKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTE1MSw3ICsxNTEsNyBAQCBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhCiAKICAgICBkb3VibGUgcmFkaXhBc0RvdWJsZSA9IGFyZ3NbMF0t
PnRvSW50ZWdlcihleGVjKTsgLy8gbmFuIC0+IDAKICAgICBpZiAocmFkaXhBc0RvdWJsZSA9PSAx
MCB8fCBhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+
dG9TdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdi0+dG9TdHJp
bmcoZXhlYykpOwogCiAgICAgaWYgKHJhZGl4QXNEb3VibGUgPCAyIHx8IHJhZGl4QXNEb3VibGUg
PiAzNikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvU3Ry
aW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iik7CkBAIC0xNjUs
NyArMTY1LDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YQogICAg
IGNvbnN0IGNoYXIqIGxhc3RDaGFySW5TdHJpbmcgPSBzICsgc2l6ZW9mKHMpIC0gMTsKICAgICBk
b3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChpc25hbih4KSB8fCBpc2luZih4
KSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKFVTdHJpbmc6OmZyb20oeCkpOworICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZzo6ZnJvbSh4KSk7CiAKICAgICBib29sIGlzTmVn
YXRpdmUgPSB4IDwgMC4wOwogICAgIGlmIChpc05lZ2F0aXZlKQpAQCAtMjA0LDcgKzIwNCw3IEBA
IEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGEKICAgICAqcCA9ICdcMCc7
CiAgICAgQVNTRVJUKHAgPCBzICsgc2l6ZW9mKHMpKTsKIAotICAgIHJldHVybiBqc1N0cmluZyhz
dGFydE9mUmVzdWx0U3RyaW5nKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3RhcnRPZlJl
c3VsdFN0cmluZyk7CiB9CiAKIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAtMjEz
LDcgKzIxMyw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEUKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIC8vIFRPRE8K
LSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2Jq
KS0+aW50ZXJuYWxWYWx1ZSgpLT50b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIHN0YXRpY19jYXN0PE51bWJlckluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKS0+dG9TdHJpbmcoZXhlYykpOwogfQogCiBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNWYWx1
ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQpAQCAt
MjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXQK
IAogICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGlzbmFuKHgpKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoIk5hTiIpOworICAgICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgIk5hTiIpOwogCiAgICAgVVN0cmluZyBzOwogICAgIGlmICh4IDwgMCkgewpAQCAtMjQ5
LDcgKzI0OSw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXQKICAg
ICAgICAgeCA9IDA7CiAKICAgICBpZiAoeCA+PSBwb3coMTAuMCwgMjEuMCkpCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZyhzICsgVVN0cmluZzo6ZnJvbSh4KSk7CisgICAgICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBzICsgVVN0cmluZzo6ZnJvbSh4KSk7CiAKICAgICBjb25zdCBkb3VibGUgdGVu
VG9UaGVGID0gcG93KDEwLjAsIGYpOwogICAgIGRvdWJsZSBuID0gZmxvb3IoeCAqIHRlblRvVGhl
Rik7CkBAIC0yNjksOCArMjY5LDggQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChF
eGVjU3RhdAogICAgIH0KICAgICBpbnQga01pbnVzZiA9IGsgLSBmOwogICAgIGlmIChrTWludXNm
IDwgbS5zaXplKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwga01p
bnVzZikgKyAiLiIgKyBtLnN1YnN0cihrTWludXNmKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHMg
KyBtLnN1YnN0cigwLCBrTWludXNmKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
ICsgbS5zdWJzdHIoMCwga01pbnVzZikgKyAiLiIgKyBtLnN1YnN0cihrTWludXNmKSk7CisgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMgKyBtLnN1YnN0cigwLCBrTWludXNmKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGZyYWN0aW9uYWxQYXJ0VG9TdHJpbmcoY2hhciogYnVmLCBpbnQmIGksIGNvbnN0
IGNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgaW50IGZyYWN0aW9uYWxEaWdpdHMpCkBA
IC0zMjAsNyArMzIwLDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChF
eAogICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAKICAgICBpZiAoaXNuYW4oeCkg
fHwgaXNpbmYoeCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nOjpmcm9tKHgpKTsK
KyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmZyb20oeCkpOwogCiAgICAg
SlNWYWx1ZSogZnJhY3Rpb25hbERpZ2l0c1ZhbHVlID0gYXJnc1swXTsKICAgICBkb3VibGUgZGYg
PSBmcmFjdGlvbmFsRGlnaXRzVmFsdWUtPnRvSW50ZWdlcihleGVjKTsKQEAgLTM0Niw3ICszNDYs
NyBAQCBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4CiAgICAgfQogCiAg
ICAgaWYgKGlzbmFuKHgpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoIk5hTiIpOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgIk5hTiIpOwogCiAgICAgaWYgKHggPT0gLTAuMCkgLy8g
KC0wLjApLnRvRXhwb25lbnRpYWwoKSBzaG91bGQgcHJpbnQgYXMgMCBpbnN0ZWFkIG9mIC0wCiAg
ICAgICAgIHggPSAwOwpAQCAtMzc4LDcgKzM3OCw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVu
Y1RvRXhwb25lbnRpYWwoRXgKIAogICAgIGZyZWVkdG9hKHJlc3VsdCk7CiAKLSAgICByZXR1cm4g
anNTdHJpbmcoYnVmKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAogSlNW
YWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKQEAgLTM5MSw3ICszOTEsNyBAQCBKU1ZhbHVl
KiBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjCiAgICAgZG91YmxlIGRvdWJsZVByZWNp
c2lvbiA9IGFyZ3NbMF0tPnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwogICAgIGRvdWJsZSB4
ID0gdi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkgfHwg
aXNuYW4oeCkgfHwgaXNpbmYoeCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2LT50b1N0cmluZyhleGVj
KSk7CiAKICAgICBVU3RyaW5nIHM7CiAgICAgaWYgKHggPCAwKSB7CkBAIC00MzAsOCArNDMwLDgg
QEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlYwogICAgICAgICAgICAg
aWYgKG0uc2l6ZSgpID4gMSkKICAgICAgICAgICAgICAgICBtID0gbS5zdWJzdHIoMCwgMSkgKyAi
LiIgKyBtLnN1YnN0cigxKTsKICAgICAgICAgICAgIGlmIChlID49IDApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUrIiArIFVTdHJpbmc6OmZyb20oZSkpOwotICAg
ICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUtIiArIFVTdHJpbmc6OmZyb20oLWUp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcyArIG0gKyAiZSsiICsg
VVN0cmluZzo6ZnJvbShlKSk7CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcyAr
IG0gKyAiZS0iICsgVVN0cmluZzo6ZnJvbSgtZSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbSA9IGNoYXJfc2VxdWVuY2UoJzAnLCBwcmVjaXNpb24pOwpAQCAtNDM5LDEzICs0
MzksMTMgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlYwogICAgIH0K
IAogICAgIGlmIChlID09IHByZWNpc2lvbiAtIDEpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhz
ICsgbSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzICsgbSk7CiAgICAgaWYgKGUg
Pj0gMCkgewogICAgICAgICBpZiAoZSArIDEgPCBtLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
biBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwgZSArIDEpICsgIi4iICsgbS5zdWJzdHIoZSArIDEp
KTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtKTsKKyAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzICsgbS5zdWJzdHIoMCwgZSArIDEpICsgIi4iICsgbS5zdWJzdHIoZSAr
IDEpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMgKyBtKTsKICAgICB9Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKHMgKyAiMC4iICsgY2hhcl9zZXF1ZW5jZSgnMCcsIC0oZSArIDEpKSAr
IG0pOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzICsgIjAuIiArIGNoYXJfc2VxdWVuY2Uo
JzAnLCAtKGUgKyAxKSkgKyBtKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIE51bWJlck9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2
OCw3ICs0NjgsNyBAQCBOdW1iZXJPYmplY3RJbXA6Ok51bWJlck9iamVjdEltcChFeGVjU3RhCiAg
ICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJlclByb3Rv
LCBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIAogICAgIC8vIG5vLiBvZiBhcmd1bWVu
dHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSks
IFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCiBib29sIE51bWJlck9iamVjdElt
cDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC00NzYsMjAgKzQ3NiwyMCBAQCBi
b29sIE51bWJlck9iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIGdldFN0
YXRpY1ZhbHVlU2xvdDxOdW1iZXJPYmplY3RJbXAsIEludGVybmFsRnVuY3Rpb25JbXA+KGV4ZWMs
IEV4ZWNTdGF0ZTo6bnVtYmVyVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLUpTVmFsdWUqIE51bWJlck9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUqLCBpbnQgdG9rZW4pIGNvbnN0CitKU1ZhbHVlKiBOdW1iZXJPYmplY3RJbXA6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgLy8gRUNN
QSAxNS43LjMKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgTmFOVmFsdWU6Ci0g
ICAgICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICAgICAgICAgIHJldHVybiBqc05hTihleGVj
KTsKICAgICAgICAgY2FzZSBOZWdJbmZpbml0eToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJl
ckNlbGwoLUluZik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4ZWMsIC1JbmYp
OwogICAgICAgICBjYXNlIFBvc0luZmluaXR5OgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
Q2VsbChJbmYpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChleGVjLCBJbmYpOwog
ICAgICAgICBjYXNlIE1heFZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyQ2VsbCgx
Ljc5NzY5MzEzNDg2MjMxNTdFKzMwOCk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXJDZWxs
KGV4ZWMsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KTsKICAgICAgICAgY2FzZSBNaW5WYWx1ZToK
LSAgICAgICAgICAgIHJldHVybiBqc051bWJlckNlbGwoNUUtMzI0KTsKKyAgICAgICAgICAgIHJl
dHVybiBqc051bWJlckNlbGwoZXhlYywgNUUtMzI0KTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtNTA0LDExICs1MDQsMTEgQEAgYm9v
bCBOdW1iZXJPYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1YwogSlNPYmplY3QqIE51bWJlck9i
amVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsK
ICAgICBKU09iamVjdCogcHJvdG8gPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
clByb3RvdHlwZSgpOwotICAgIE51bWJlckluc3RhbmNlKiBvYmogPSBuZXcgTnVtYmVySW5zdGFu
Y2UocHJvdG8pOworICAgIE51bWJlckluc3RhbmNlKiBvYmogPSBuZXcgKGV4ZWMpIE51bWJlcklu
c3RhbmNlKHByb3RvKTsKIAogICAgIC8vIEZJWE1FOiBDaGVjayBhcmdzWzBdLT5pc1VuZGVmaW5l
ZCgpIGluc3RlYWQgb2YgYXJncy5pc0VtcHR5KCk/CiAgICAgZG91YmxlIG4gPSBhcmdzLmlzRW1w
dHkoKSA/IDAgOiBhcmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICBvYmotPnNldEludGVybmFs
VmFsdWUoanNOdW1iZXIobikpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcihl
eGVjLCBuKSk7CiAgICAgcmV0dXJuIG9iajsKIH0KIApAQCAtNTE2LDcgKzUxNiw3IEBAIEpTT2Jq
ZWN0KiBOdW1iZXJPYmplY3RJbXA6OmNvbnN0cnVjdChFeGUKIEpTVmFsdWUqIE51bWJlck9iamVj
dEltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExp
c3QmIGFyZ3MpCiB7CiAgICAgLy8gRklYTUU6IENoZWNrIGFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkg
aW5zdGVhZCBvZiBhcmdzLmlzRW1wdHkoKT8KLSAgICByZXR1cm4ganNOdW1iZXIoYXJncy5pc0Vt
cHR5KCkgPyAwIDogYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBhcmdzLmlzRW1wdHkoKSA/IDAgOiBhcmdzWzBdLT50b051bWJlcihleGVjKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHJldmlzaW9u
IDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNSw3ICs0MDUsNyBAQCBjb25zdCBIYXNoRW50cnkqIEpTT2JqZWN0OjpmaW5kUHJvcGVy
dHlICiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmRlZmluZUdldHRlcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBnZXR0ZXJG
dW5jKQordm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCogZ2V0dGVyRnVuYykKIHsKICAgICBK
U1ZhbHVlICpvID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CiAgICAgR2V0dGVyU2V0dGVySW1w
ICpnczsKQEAgLTQxMyw3ICs0MTMsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhl
Y1N0YXRlKiwgCiAgICAgaWYgKG8gJiYgby0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpIHsK
ICAgICAgICAgZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAgKj4obyk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZ3MgPSBuZXcgR2V0dGVyU2V0dGVySW1wOworICAgICAgICBncyA9IG5l
dyAoZXhlYykgR2V0dGVyU2V0dGVySW1wOwogICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1l
LCBncywgR2V0dGVyU2V0dGVyKTsKICAgICB9CiAgICAgCkBAIC00MjEsNyArNDIxLDcgQEAgdm9p
ZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIAogICAgIGdzLT5zZXRHZXR0ZXIo
Z2V0dGVyRnVuYyk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzZXR0ZXJGdW5jKQor
dm9pZCBKU09iamVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCogc2V0dGVyRnVuYykKIHsKICAgICBKU1ZhbHVl
ICpvID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CiAgICAgR2V0dGVyU2V0dGVySW1wICpnczsK
QEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRl
KiwgCiAgICAgaWYgKG8gJiYgby0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpIHsKICAgICAg
ICAgZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAgKj4obyk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZ3MgPSBuZXcgR2V0dGVyU2V0dGVySW1wOworICAgICAgICBncyA9IG5ldyAoZXhl
YykgR2V0dGVyU2V0dGVySW1wOwogICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCBncywg
R2V0dGVyU2V0dGVyKTsKICAgICB9CiAgICAgCkBAIC02MTgsOSArNjE4LDkgQEAgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZQogICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKIH0KIAotdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgaW50IHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSlNPYmpl
Y3Q6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgaW50IHZhbHVlLCBpbnQgYXR0cikKIHsKLSAgICBfcHJvcC5wdXQocHJvcGVydHlOYW1l
LCBqc051bWJlcih2YWx1ZSksIGF0dHIpOworICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIGpz
TnVtYmVyKGV4ZWMsIHZhbHVlKSwgYXR0cik7CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnJlbW92ZURp
cmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCkBAIC02ODcsMTggKzY4NywxOCBA
QCBKU09iamVjdCAqRXJyb3I6OmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsCiAKICAgTGlzdCBhcmdz
OwogICBpZiAobWVzc2FnZS5pc0VtcHR5KCkpCi0gICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXJy
b3JOYW1lc1tlcnJ0eXBlXSkpOworICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIGVycm9y
TmFtZXNbZXJydHlwZV0pKTsKICAgZWxzZQotICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKG1lc3Nh
Z2UpKTsKKyAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBtZXNzYWdlKSk7CiAgIEpTT2Jq
ZWN0ICplcnIgPSBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihjb25zLT5jb25zdHJ1Y3QoZXhlYyxh
cmdzKSk7CiAKICAgaWYgKGxpbmVubyAhPSAtMSkKLSAgICBlcnItPnB1dChleGVjLCAibGluZSIs
IGpzTnVtYmVyKGxpbmVubykpOworICAgIGVyci0+cHV0KGV4ZWMsICJsaW5lIiwganNOdW1iZXIo
ZXhlYywgbGluZW5vKSk7CiAgIGlmIChzb3VyY2VJZCAhPSAtMSkKLSAgICBlcnItPnB1dChleGVj
LCAic291cmNlSWQiLCBqc051bWJlcihzb3VyY2VJZCkpOworICAgIGVyci0+cHV0KGV4ZWMsICJz
b3VyY2VJZCIsIGpzTnVtYmVyKGV4ZWMsIHNvdXJjZUlkKSk7CiAKICAgaWYoIXNvdXJjZVVSTC5p
c051bGwoKSkKLSAgICBlcnItPnB1dChleGVjLCAic291cmNlVVJMIiwganNTdHJpbmcoc291cmNl
VVJMKSk7CisgICAgZXJyLT5wdXQoZXhlYywgInNvdXJjZVVSTCIsIGpzU3RyaW5nKGV4ZWMsIHNv
dXJjZVVSTCkpOwogIAogICByZXR1cm4gZXJyOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkocmV2
aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzMiw3ICs0MzIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBKU1ZhbHVlICoqZ2V0
RGlyZWN0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7
IHJldHVybiBfcHJvcC5nZXRMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOyB9CiAgICAgdm9pZCBwdXRE
aXJlY3QoY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50
IGF0dHIgPSAwKTsKLSAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIGludCB2YWx1ZSwgaW50IGF0dHIgPSAwKTsKKyAgICB2b2lkIHB1dERpcmVjdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGludCB2YWx1ZSwgaW50IGF0
dHIgPSAwKTsKICAgICB2b2lkIHJlbW92ZURpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpOwogICAgIAogICAgIC8vIGNvbnZlbmllbmNlIHRvIGFkZCBhIGZ1bmN0aW9uIHByb3Bl
cnR5IHVuZGVyIHRoZSBmdW5jdGlvbidzIG93biBidWlsdC1pbiBuYW1lCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL29iamVjdF9vYmplY3QuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTggKzQzLDE4
IEBAIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVMKIE9iamVjdFByb3Rv
dHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUq
IGZ1bmN0aW9uUHJvdG90eXBlKQogICAgIDogSlNPYmplY3QoKSAvLyBbW1Byb3RvdHlwZV1dIGlz
IG51bGwKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywg
b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rp
b24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBl
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzT3duUHJvcGVydHksIG9iamVjdFByb3RvRnVu
Y0hhc093blByb3BlcnR5KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlz
RW51bWVyYWJsZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pc1Byb3RvdHlwZU9mLCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmlu
Zywgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlw
ZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZiksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzT3du
UHJvcGVydHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVu
Y3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm9wZXJ0eUlzRW51bWVy
YWJsZSwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUpLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBm
dW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzUHJvdG90eXBlT2Ys
IG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YpLCBEb250RW51bSk7CiAKICAgICAvLyBNb3pp
bGxhIGV4dGVuc2lvbnMKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2Rl
ZmluZUdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9u
UHJvdG90eXBlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0ZXJfXywgb2Jq
ZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0
aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLl9fbG9va3VwR2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1
cEdldHRlciksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5fX2xvb2t1cFNldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fZGVmaW5l
R2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlciksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0
aW9uUHJvdG90eXBlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0ZXJfXywg
b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5
cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1cEdldHRlcl9fLCBvYmplY3RQcm90
b0Z1bmNMb29rdXBHZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLl9fbG9va3VwU2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1
cFNldHRlciksIERvbnRFbnVtKTsKIH0KIAogCkBAIC0xMjMsMTIgKzEyMywxMiBAQCBKU1ZhbHVl
KiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyCiAKIEpTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmKQogewotICAgIHJldHVybiBqc1N0cmluZyh0aGlzT2JqLT50b1N0cmluZyhleGVj
KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpKTsK
IH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKmV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKIHsKLSAg
ICByZXR1cm4ganNTdHJpbmcoIltvYmplY3QgIiArIHRoaXNPYmotPmNsYXNzTmFtZSgpICsgIl0i
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIltvYmplY3QgIiArIHRoaXNPYmotPmNsYXNz
TmFtZSgpICsgIl0iKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9i
amVjdE9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQwLDcg
KzE0MCw3IEBAIE9iamVjdE9iamVjdEltcDo6T2JqZWN0T2JqZWN0SW1wKEV4ZWNTdGEKICAgcHV0
RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG9ialByb3RvLCBEb250RW51
bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25z
dHJ1Y3RvcgotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnRE
ZWxldGV8RG9udEVudW0pOwogfQogCiAKQEAgLTE2MSw3ICsxNjEsNyBAQCBKU09iamVjdCogT2Jq
ZWN0T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlCiAgICAgICByZXR1cm4gYXJnLT50b09iamVjdChl
eGVjKTsKICAgY2FzZSBOdWxsVHlwZToKICAgY2FzZSBVbmRlZmluZWRUeXBlOgotICAgICAgcmV0
dXJuIG5ldyBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpKTsKKyAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOwogICBkZWZhdWx0OgogICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICByZXR1cm4gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9wcm9wZXJ0eV9tYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfbWFwLmgJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3Bl
cnR5X21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeTsKICAgICBzdHJ1Y3QgUHJvcGVydHlNYXBI
YXNoVGFibGU7CiAKLSAgICBjbGFzcyBTYXZlZFByb3BlcnR5IDogTm9uY29weWFibGUgewotICAg
IHB1YmxpYzoKLSAgICAgICAgLy8gU2luY2Ugd2UgdXNlIHRoaXMgaW4gYXJyYXlzLCB3ZSBhbGxv
Y2F0ZSBpdCB1bmluaXRpYWxpemVkCi0gICAgICAgIC8vIGFuZCB0aGVuIGV4cGxpY2l0bHkgaW5p
dGlhbGl6ZS4gVGhpcyBtZWFucyB3ZSBjYW4gYWxsb2NhdGUKLSAgICAgICAgLy8gdGhlIGFycmF5
IHdpdGhvdXQgaW5pdGlhbGl6aW5nIGV2ZXJ5IHNhdmVkIHByb3BlcnR5IGluIHRoZQotICAgICAg
ICAvLyBhcnJheSB0d2ljZS4gVG8gYWNjb21wbGlzaCB0aGlzLCB0aGUgY2xhc3MgdXNlcyBkYXRh
IG1lbWJlcnMKLSAgICAgICAgLy8gd2l0aCB0eXBlcyB0aGF0IGRvbid0IGhhdmUgY29uc3RydWN0
b3JzLgotICAgICAgICBTYXZlZFByb3BlcnR5KCk7Ci0gICAgICAgIHZvaWQgaW5pdChVU3RyaW5n
OjpSZXAqIG5hbWUsIEpTVmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgflNh
dmVkUHJvcGVydHkoKTsKLQotICAgICAgICBVU3RyaW5nOjpSZXAqIG5hbWUoKSBjb25zdDsKLSAg
ICAgICAgSlNWYWx1ZSogdmFsdWUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
cygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVVN0cmluZzo6UmVwKiBtX25hbWU7
Ci0gICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
czsKLSAgICB9OwotCiAgICAgY2xhc3MgUHJvcGVydHlNYXAgOiBOb25jb3B5YWJsZSB7CiAgICAg
cHVibGljOgogICAgICAgICBQcm9wZXJ0eU1hcCgpOwpAQCAtMTA5LDY1ICs4OCw2IEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgewogICAgIH0KLQotICAgIGlubGluZSBTYXZlZFByb3BlcnR5OjpT
YXZlZFByb3BlcnR5KCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIDogbV9uYW1lKDApCi0gICAg
ICAgICwgbV92YWx1ZSgwKQotICAgICAgICAsIG1fYXR0cmlidXRlcygwKQotI2VuZGlmCi0gICAg
ewotICAgIH0KLQotICAgIGlubGluZSB2b2lkIFNhdmVkUHJvcGVydHk6OmluaXQoVVN0cmluZzo6
UmVwKiBuYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChuYW1lKTsKLSAgICAgICAgQVNTRVJUKHZhbHVlKTsKLQotICAgICAgICBB
U1NFUlQoIW1fbmFtZSk7Ci0gICAgICAgIEFTU0VSVCghbV92YWx1ZSk7Ci0gICAgICAgIEFTU0VS
VCghbV9hdHRyaWJ1dGVzKTsKLQotICAgICAgICBtX25hbWUgPSBuYW1lOwotICAgICAgICBtX3Zh
bHVlID0gdmFsdWU7Ci0gICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0gICAgICAg
IG5hbWUtPnJlZigpOwotICAgICAgICBnY1Byb3RlY3QodmFsdWUpOwotICAgIH0KLQotICAgIGlu
bGluZSBTYXZlZFByb3BlcnR5Ojp+U2F2ZWRQcm9wZXJ0eSgpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9uYW1lKTsKLSAgICAgICAgQVNTRVJUKG1fdmFsdWUpOwotCi0gICAgICAgIG1fbmFtZS0+
ZGVyZWYoKTsKLSAgICAgICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5s
aW5lIFVTdHJpbmc6OlJlcCogU2F2ZWRQcm9wZXJ0eTo6bmFtZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQobV9uYW1lKTsKLSAgICAgICAgQVNTRVJUKG1fdmFsdWUpOwotCi0gICAgICAg
IHJldHVybiBtX25hbWU7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWUqIFNhdmVkUHJvcGVy
dHk6OnZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX25hbWUpOwotICAgICAg
ICBBU1NFUlQobV92YWx1ZSk7Ci0KLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgfQotCi0g
ICAgaW5saW5lIHVuc2lnbmVkIFNhdmVkUHJvcGVydHk6OmF0dHJpYnV0ZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fbmFtZSk7Ci0gICAgICAgIEFTU0VSVChtX3ZhbHVlKTsKLQot
ICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UKIAog
I2VuZGlmIC8vIF9LSlNfUFJPUEVSVFlfTUFQX0hfCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
cHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgJKHJl
dmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTQgKzMwLDE4IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi0gICAgaW5saW5l
IHZvaWQgZ2NQcm90ZWN0KEpTVmFsdWUgKnZhbCkgCi0gICAgeyAKLSAgICAgICAgQ29sbGVjdG9y
Ojpwcm90ZWN0KHZhbCk7CisgICAgaW5saW5lIHZvaWQgZ2NQcm90ZWN0KEpTVmFsdWUqIHZhbCkg
CisgICAgeworICAgICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh2YWwpOworICAgICAgICBp
ZiAoaGVhcCkKKyAgICAgICAgICAgIGhlYXAtPnByb3RlY3QodmFsKTsKICAgICB9CiAKLSAgICBp
bmxpbmUgdm9pZCBnY1VucHJvdGVjdChKU1ZhbHVlICp2YWwpCi0gICAgeyAKLSAgICAgICAgQ29s
bGVjdG9yOjp1bnByb3RlY3QodmFsKTsKKyAgICBpbmxpbmUgdm9pZCBnY1VucHJvdGVjdChKU1Zh
bHVlKiB2YWwpCisgICAgeworICAgICAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh2YWwpOwor
ICAgICAgICBpZiAoaGVhcCkKKyAgICAgICAgICAgIGhlYXAtPnVucHJvdGVjdCh2YWwpOwogICAg
IH0KIAogICAgIGlubGluZSB2b2lkIGdjUHJvdGVjdE51bGxUb2xlcmFudChKU1ZhbHVlICp2YWwp
IApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNwcAkocmV2aXNpb24gMzI3NTcp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDEwICs1MSwxMCBAQCBjb25zdCBDbGFzc0luZm8gUmVnRXhwUHJvdG90eXBlOjppbmZv
ID0gCiBSZWdFeHBQcm90b3R5cGU6OlJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9i
amVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rp
b25Qcm90b3R5cGUpCiAgICAgOiBKU09iamVjdChvYmplY3RQcm90b3R5cGUpCiB7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90
eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsZSwgcmVnRXhwUHJvdG9GdW5jQ29t
cGlsZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5l
eGVjLCByZWdFeHBQcm90b0Z1bmNFeGVjKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0
aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRlc3QsIHJlZ0V4cFByb3RvRnVuY1Rlc3QpLCBEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0
aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHJlZ0V4cFBy
b3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb21waWxlLCByZWdFeHBQcm90b0Z1bmNDb21waWxlKSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjLCBy
ZWdFeHBQcm90b0Z1bmNFeGVjKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS50ZXN0LCByZWdFeHBQcm90b0Z1bmNUZXN0KSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywg
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xMDYsNyArMTA2LDcgQEAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YQogewogICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpIHsK
ICAgICAgICAgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGU6OmluZm8pKQot
ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIvLyIpOworICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsICIvLyIpOwogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogICAgIH0KIApAQCAtMTE3LDcgKzExNyw3IEBAIEpTVmFsdWUqIHJlZ0V4cFByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGEKICAgICAgICAgcmVzdWx0ICs9ICJpIjsKICAgICBpZiAodGhp
c09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLT50b0Jvb2xl
YW4oZXhlYykpCiAgICAgICAgIHJlc3VsdCArPSAibSI7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHJl
c3VsdCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0xNTAsNyArMTUwLDcgQEAgYm9vbCBSZWdFeHBJbXA6OmdldE93
blByb3BlcnR5U2xvdChFeGVjUwogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PFJlZ0V4cElt
cCwgSlNPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6UmVnRXhwSW1wVGFibGUoZXhlYyksIHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIFJlZ0V4cEltcDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0CitKU1ZhbHVlKiBSZWdFeHBJbXA6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAg
ICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICBjYXNlIEdsb2JhbDoKQEAgLTE2MCw5ICsxNjAs
OSBAQCBKU1ZhbHVlKiBSZWdFeHBJbXA6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAgICAgICAgIGNh
c2UgTXVsdGlsaW5lOgogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihtX3JlZ0V4cC0+bXVs
dGlsaW5lKCkpOwogICAgICAgICBjYXNlIFNvdXJjZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0
cmluZyhtX3JlZ0V4cC0+cGF0dGVybigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBtX3JlZ0V4cC0+cGF0dGVybigpKTsKICAgICAgICAgY2FzZSBMYXN0SW5kZXg6Ci0gICAg
ICAgICAgICByZXR1cm4ganNOdW1iZXIobV9sYXN0SW5kZXgpOworICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIG1fbGFzdEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yODcsNyArMjg3LDcgQEAgUmVnRXhwT2JqZWN0SW1wOjpSZWdFeHBP
YmplY3RJbXAoRXhlY1N0YQogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3Rv
dHlwZSwgcmVnUHJvdG8sIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIAogICAv
LyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8
IERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAK
IC8qIApAQCAtMzE3LDQ4ICszMTcsNDggQEAgdm9pZCBSZWdFeHBPYmplY3RJbXA6OnBlcmZvcm1N
YXRjaChSZWdFeAogSlNPYmplY3QqIFJlZ0V4cE9iamVjdEltcDo6YXJyYXlPZk1hdGNoZXMoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICB1bnNpZ25lZCBsYXN0TnVtU3VicGF0dGVybnMgPSBk
LT5sYXN0TnVtU3ViUGF0dGVybnM7Ci0gIEFycmF5SW5zdGFuY2UqIGFyciA9IG5ldyBBcnJheUlu
c3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgbGFz
dE51bVN1YnBhdHRlcm5zICsgMSk7CisgIEFycmF5SW5zdGFuY2UqIGFyciA9IG5ldyAoZXhlYykg
QXJyYXlJbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBl
KCksIGxhc3ROdW1TdWJwYXR0ZXJucyArIDEpOwogICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9
IGxhc3ROdW1TdWJwYXR0ZXJuczsgKytpKSB7CiAgICAgaW50IHN0YXJ0ID0gZC0+bGFzdE92ZWN0
b3JbMiAqIGldOwogICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgYXJyLT5wdXQoZXhlYywgaSwg
anNTdHJpbmcoZC0+bGFzdElucHV0LnN1YnN0cihzdGFydCwgZC0+bGFzdE92ZWN0b3JbMiAqIGkg
KyAxXSAtIHN0YXJ0KSkpOworICAgICAgYXJyLT5wdXQoZXhlYywgaSwganNTdHJpbmcoZXhlYywg
ZC0+bGFzdElucHV0LnN1YnN0cihzdGFydCwgZC0+bGFzdE92ZWN0b3JbMiAqIGkgKyAxXSAtIHN0
YXJ0KSkpOwogICB9Ci0gIGFyci0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbmRl
eCwganNOdW1iZXIoZC0+bGFzdE92ZWN0b3JbMF0pKTsKLSAgYXJyLT5wdXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmlucHV0LCBqc1N0cmluZyhkLT5sYXN0SW5wdXQpKTsKKyAgYXJyLT5w
dXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluZGV4LCBqc051bWJlcihleGVjLCBkLT5s
YXN0T3ZlY3RvclswXSkpOworICBhcnItPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
aW5wdXQsIGpzU3RyaW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCkpOwogICByZXR1cm4gYXJyOwogfQog
Ci1KU1ZhbHVlKiBSZWdFeHBPYmplY3RJbXA6OmdldEJhY2tyZWYodW5zaWduZWQgaSkgY29uc3QK
K0pTVmFsdWUqIFJlZ0V4cE9iamVjdEltcDo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGkpIGNvbnN0CiB7CiAgIGlmIChkLT5sYXN0T3ZlY3RvciAmJiBpIDw9IGQtPmxhc3RO
dW1TdWJQYXR0ZXJucykKLSAgICByZXR1cm4ganNTdHJpbmcoZC0+bGFzdElucHV0LnN1YnN0cihk
LT5sYXN0T3ZlY3RvclsyICogaV0sIGQtPmxhc3RPdmVjdG9yWzIgKiBpICsgMV0gLSBkLT5sYXN0
T3ZlY3RvclsyICogaV0pKTsKLSAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgZC0+bGFzdElucHV0LnN1YnN0cihkLT5sYXN0T3ZlY3RvclsyICogaV0sIGQt
Pmxhc3RPdmVjdG9yWzIgKiBpICsgMV0gLSBkLT5sYXN0T3ZlY3RvclsyICogaV0pKTsKKyAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsICIiKTsKIH0KIAotSlNWYWx1ZSogUmVnRXhwT2JqZWN0SW1wOjpn
ZXRMYXN0UGFyZW4oKSBjb25zdAorSlNWYWx1ZSogUmVnRXhwT2JqZWN0SW1wOjpnZXRMYXN0UGFy
ZW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICB1bnNpZ25lZCBpID0gZC0+bGFzdE51bVN1
YlBhdHRlcm5zOwogICBpZiAoaSA+IDApIHsKICAgICBBU1NFUlQoZC0+bGFzdE92ZWN0b3IpOwot
ICAgIHJldHVybiBqc1N0cmluZyhkLT5sYXN0SW5wdXQuc3Vic3RyKGQtPmxhc3RPdmVjdG9yWzIg
KiBpXSwgZC0+bGFzdE92ZWN0b3JbMiAqIGkgKyAxXSAtIGQtPmxhc3RPdmVjdG9yWzIgKiBpXSkp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQuc3Vic3RyKGQtPmxhc3RP
dmVjdG9yWzIgKiBpXSwgZC0+bGFzdE92ZWN0b3JbMiAqIGkgKyAxXSAtIGQtPmxhc3RPdmVjdG9y
WzIgKiBpXSkpOwogICB9Ci0gIHJldHVybiBqc1N0cmluZygiIik7CisgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCAiIik7CiB9CiAKLUpTVmFsdWUgKlJlZ0V4cE9iamVjdEltcDo6Z2V0TGVmdENvbnRl
eHQoKSBjb25zdAorSlNWYWx1ZSAqUmVnRXhwT2JqZWN0SW1wOjpnZXRMZWZ0Q29udGV4dChFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgIGlmIChkLT5sYXN0T3ZlY3RvcikKLSAgICByZXR1cm4g
anNTdHJpbmcoZC0+bGFzdElucHV0LnN1YnN0cigwLCBkLT5sYXN0T3ZlY3RvclswXSkpOwotICBy
ZXR1cm4ganNTdHJpbmcoIiIpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBkLT5sYXN0SW5w
dXQuc3Vic3RyKDAsIGQtPmxhc3RPdmVjdG9yWzBdKSk7CisgIHJldHVybiBqc1N0cmluZyhleGVj
LCAiIik7CiB9CiAKLUpTVmFsdWUgKlJlZ0V4cE9iamVjdEltcDo6Z2V0UmlnaHRDb250ZXh0KCkg
Y29uc3QKK0pTVmFsdWUgKlJlZ0V4cE9iamVjdEltcDo6Z2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKIHsKICAgaWYgKGQtPmxhc3RPdmVjdG9yKSB7CiAgICAgVVN0cmluZyBz
ID0gZC0+bGFzdElucHV0OwotICAgIHJldHVybiBqc1N0cmluZyhzLnN1YnN0cihkLT5sYXN0T3Zl
Y3RvclsxXSwgcy5zaXplKCkgLSBkLT5sYXN0T3ZlY3RvclsxXSkpOworICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBzLnN1YnN0cihkLT5sYXN0T3ZlY3RvclsxXSwgcy5zaXplKCkgLSBkLT5sYXN0
T3ZlY3RvclsxXSkpOwogICB9Ci0gIHJldHVybiBqc1N0cmluZygiIik7CisgIHJldHVybiBqc1N0
cmluZyhleGVjLCAiIik7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKQEAgLTM2Niw0NCArMzY2LDQ0IEBAIGJvb2wgUmVnRXhwT2JqZWN0
SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdF
eHBPYmplY3RJbXAsIEludGVybmFsRnVuY3Rpb25JbXA+KGV4ZWMsIEV4ZWNTdGF0ZTo6UmVnRXhw
T2JqZWN0SW1wVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpT
VmFsdWUgKlJlZ0V4cE9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQg
dG9rZW4pIGNvbnN0CitKU1ZhbHVlICpSZWdFeHBPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIHN3aXRjaCAodG9rZW4pIHsK
ICAgICBjYXNlIERvbGxhcjE6Ci0gICAgICByZXR1cm4gZ2V0QmFja3JlZigxKTsKKyAgICAgIHJl
dHVybiBnZXRCYWNrcmVmKGV4ZWMsIDEpOwogICAgIGNhc2UgRG9sbGFyMjoKLSAgICAgIHJldHVy
biBnZXRCYWNrcmVmKDIpOworICAgICAgcmV0dXJuIGdldEJhY2tyZWYoZXhlYywgMik7CiAgICAg
Y2FzZSBEb2xsYXIzOgotICAgICAgcmV0dXJuIGdldEJhY2tyZWYoMyk7CisgICAgICByZXR1cm4g
Z2V0QmFja3JlZihleGVjLCAzKTsKICAgICBjYXNlIERvbGxhcjQ6Ci0gICAgICByZXR1cm4gZ2V0
QmFja3JlZig0KTsKKyAgICAgIHJldHVybiBnZXRCYWNrcmVmKGV4ZWMsIDQpOwogICAgIGNhc2Ug
RG9sbGFyNToKLSAgICAgIHJldHVybiBnZXRCYWNrcmVmKDUpOworICAgICAgcmV0dXJuIGdldEJh
Y2tyZWYoZXhlYywgNSk7CiAgICAgY2FzZSBEb2xsYXI2OgotICAgICAgcmV0dXJuIGdldEJhY2ty
ZWYoNik7CisgICAgICByZXR1cm4gZ2V0QmFja3JlZihleGVjLCA2KTsKICAgICBjYXNlIERvbGxh
cjc6Ci0gICAgICByZXR1cm4gZ2V0QmFja3JlZig3KTsKKyAgICAgIHJldHVybiBnZXRCYWNrcmVm
KGV4ZWMsIDcpOwogICAgIGNhc2UgRG9sbGFyODoKLSAgICAgIHJldHVybiBnZXRCYWNrcmVmKDgp
OworICAgICAgcmV0dXJuIGdldEJhY2tyZWYoZXhlYywgOCk7CiAgICAgY2FzZSBEb2xsYXI5Ogot
ICAgICAgcmV0dXJuIGdldEJhY2tyZWYoOSk7CisgICAgICByZXR1cm4gZ2V0QmFja3JlZihleGVj
LCA5KTsKICAgICBjYXNlIElucHV0OgotICAgICAgcmV0dXJuIGpzU3RyaW5nKGQtPmxhc3RJbnB1
dCk7CisgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZC0+bGFzdElucHV0KTsKICAgICBjYXNl
IE11bHRpbGluZToKICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZC0+bXVsdGlsaW5lKTsKICAgICBj
YXNlIExhc3RNYXRjaDoKLSAgICAgIHJldHVybiBnZXRCYWNrcmVmKDApOworICAgICAgcmV0dXJu
IGdldEJhY2tyZWYoZXhlYywgMCk7CiAgICAgY2FzZSBMYXN0UGFyZW46Ci0gICAgICByZXR1cm4g
Z2V0TGFzdFBhcmVuKCk7CisgICAgICByZXR1cm4gZ2V0TGFzdFBhcmVuKGV4ZWMpOwogICAgIGNh
c2UgTGVmdENvbnRleHQ6Ci0gICAgICByZXR1cm4gZ2V0TGVmdENvbnRleHQoKTsKKyAgICAgIHJl
dHVybiBnZXRMZWZ0Q29udGV4dChleGVjKTsKICAgICBjYXNlIFJpZ2h0Q29udGV4dDoKLSAgICAg
IHJldHVybiBnZXRSaWdodENvbnRleHQoKTsKKyAgICAgIHJldHVybiBnZXRSaWdodENvbnRleHQo
ZXhlYyk7CiAgICAgZGVmYXVsdDoKICAgICAgIEFTU0VSVCgwKTsKICAgfQogCi0gIHJldHVybiBq
c1N0cmluZygiIik7CisgIHJldHVybiBqc1N0cmluZyhleGVjLCAiIik7CiB9CiAKIHZvaWQgUmVn
RXhwT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlKQpAQCAtNDUxLDcgKzQ1MSw3IEBAIEpTT2JqZWN0ICpS
ZWdFeHBPYmplY3RJbXA6OmNvbnN0cnVjdChFeGUKIEpTT2JqZWN0KiBSZWdFeHBPYmplY3RJbXA6
OmNyZWF0ZVJlZ0V4cEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8UmVnRXhwPiByZWdF
eHApCiB7CiAgICAgcmV0dXJuIHJlZ0V4cC0+aXNWYWxpZCgpCi0gICAgICAgID8gbmV3IFJlZ0V4
cEltcChzdGF0aWNfY2FzdDxSZWdFeHBQcm90b3R5cGUqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnJlZ0V4cFByb3RvdHlwZSgpKSwgcmVnRXhwKQorICAgICAgICA/IG5ldyAoZXhlYykg
UmVnRXhwSW1wKHN0YXRpY19jYXN0PFJlZ0V4cFByb3RvdHlwZSo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cmVnRXhwUHJvdG90eXBlKCkpLCByZWdFeHApCiAgICAgICAgIDogdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvciwgVVN0cmluZygiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Np
b246ICIpLmFwcGVuZChyZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiB9CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3JlZ2V4cF9vYmplY3QuaAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvcmVnZXhwX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMCArOTAsMTAgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIGlucHV0KCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBKU1ZhbHVlKiBnZXRCYWNrcmVmKHVuc2lnbmVkKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSogZ2V0TGFzdFBhcmVuKCkgY29uc3Q7Ci0gICAgICAgIEpTVmFs
dWUqIGdldExlZnRDb250ZXh0KCkgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIGdldFJpZ2h0Q29u
dGV4dCgpIGNvbnN0OworICAgICAgICBKU1ZhbHVlKiBnZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZSogZ2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSop
IGNvbnN0OworICAgICAgICBKU1ZhbHVlKiBnZXRMZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25z
dDsKKyAgICAgICAgSlNWYWx1ZSogZ2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0Owog
CiAgICAgICAgIE93blB0cjxSZWdFeHBPYmplY3RJbXBQcml2YXRlPiBkOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTAgKzQw
LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiBjb25zdCBDbGFzc0luZm8gU3RyaW5nSW5zdGFuY2U6
OmluZm8gPSB7ICJTdHJpbmciLCAwLCAwLCAwIH07CiAKLVN0cmluZ0luc3RhbmNlOjpTdHJpbmdJ
bnN0YW5jZShKU09iamVjdCAqcHJvdG8pCitTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG8pCiAgIDogSlNXcmFwcGVyT2JqZWN0KHBy
b3RvKQogewotICBzZXRJbnRlcm5hbFZhbHVlKGpzU3RyaW5nKCIiKSk7CisgIHNldEludGVybmFs
VmFsdWUoanNTdHJpbmcoZXhlYywgIiIpKTsKIH0KIAogU3RyaW5nSW5zdGFuY2U6OlN0cmluZ0lu
c3RhbmNlKEpTT2JqZWN0ICpwcm90bywgU3RyaW5nSW1wKiBzdHJpbmcpCkBAIC01MiwyNSArNTIs
MjUgQEAgU3RyaW5nSW5zdGFuY2U6OlN0cmluZ0luc3RhbmNlKEpTT2JqZWN0IAogICBzZXRJbnRl
cm5hbFZhbHVlKHN0cmluZyk7CiB9CiAKLVN0cmluZ0luc3RhbmNlOjpTdHJpbmdJbnN0YW5jZShK
U09iamVjdCAqcHJvdG8sIGNvbnN0IFVTdHJpbmcgJnN0cmluZykKK1N0cmluZ0luc3RhbmNlOjpT
dHJpbmdJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90bywgY29uc3QgVVN0
cmluZyAmc3RyaW5nKQogICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKIHsKLSAgc2V0SW50ZXJu
YWxWYWx1ZShqc1N0cmluZyhzdHJpbmcpKTsKKyAgc2V0SW50ZXJuYWxWYWx1ZShqc1N0cmluZyhl
eGVjLCBzdHJpbmcpKTsKIH0KIAotSlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QgJnNsb3QpCitKU1ZhbHVlKiBTdHJpbmdJbnN0YW5jZTo6bGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0
YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+
KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkpOwogfQog
Ci1KU1ZhbHVlKiBTdHJpbmdJbnN0YW5jZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSogU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJl
dHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2Uo
KSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zdWJzdHIoc2xvdC5pbmRleCgpLCAxKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4oc2xv
dC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnN1YnN0cihzbG90LmluZGV4
KCksIDEpKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3Bl
cnR5R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdJbnN0YW5jZU51bWVyaWNQ
cm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5kZXgs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGlj
X2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCkt
PnZhbHVlKCkuc3Vic3RyKGluZGV4LCAxKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0
YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1
ZSgpLT52YWx1ZSgpLnN1YnN0cihpbmRleCwgMSkpOwogfQogCiBib29sIFN0cmluZ0luc3RhbmNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE2NSwxMCArMTY1LDEwIEBAIGNv
bnN0IENsYXNzSW5mbyBTdHJpbmdQcm90b3R5cGU6OmluZm8gPSAKICovCiAvLyBFQ01BIDE1LjUu
NAogU3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RQcm90b3R5cGUqIG9ialByb3RvKQotICA6IFN0cmluZ0luc3RhbmNlKG9ialByb3RvKQorICA6
IFN0cmluZ0luc3RhbmNlKGV4ZWMsIG9ialByb3RvKQogewogICAvLyBUaGUgY29uc3RydWN0b3Ig
d2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgU3RyaW5nT2JqZWN0SW1wIGhhcyBiZWVuIGJ1aWx0
Ci0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBTdHJpbmdQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90ICZzbG90KQpAQCAtMzQ0LDEwICszNDQsMTAgQEAgc3RhdGljIEpTVmFsdWUg
KnJlcGxhY2UoRXhlY1N0YXRlICpleGVjLAogICAgICAgICAgICAgICBpZiAobWF0Y2hTdGFydCA8
IDApCiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2Uu
c3Vic3RyKG1hdGNoU3RhcnQsIG1hdGNoTGVuKSkpOworICAgICAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nKGV4ZWMsIHNvdXJjZS5zdWJzdHIobWF0Y2hTdGFydCwgbWF0Y2hMZW4pKSk7
CiAgICAgICAgICAgfQogICAgICAgICAgIAotICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVy
KGNvbXBsZXRlTWF0Y2hTdGFydCkpOworICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGV4
ZWMsIGNvbXBsZXRlTWF0Y2hTdGFydCkpOwogICAgICAgICAgIGFyZ3MuYXBwZW5kKHNvdXJjZVZh
bCk7CiAKICAgICAgICAgICBzdWJzdGl0dXRlZFJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnRGdW5j
dGlvbi0+Y2FsbChleGVjLCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSwgYXJncyktPnRvU3RyaW5n
KGV4ZWMpOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyBKU1ZhbHVlICpyZXBsYWNlKEV4ZWNT
dGF0ZSAqZXhlYywKICAgICBpZiAocmVzdWx0ID09IHNvdXJjZSkKICAgICAgIHJldHVybiBzb3Vy
Y2VWYWw7CiAKLSAgICByZXR1cm4ganNTdHJpbmcocmVzdWx0KTsKKyAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgcmVzdWx0KTsKICAgfQogICAKICAgLy8gRmlyc3QgYXJnIGlzIGEgc3RyaW5nCkBA
IC0zOTUsMTQgKzM5NSwxNCBAQCBzdGF0aWMgSlNWYWx1ZSAqcmVwbGFjZShFeGVjU3RhdGUgKmV4
ZWMsCiAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uKSB7CiAgICAgICBMaXN0IGFyZ3M7CiAgICAg
ICAKLSAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKHNvdXJjZS5zdWJzdHIobWF0Y2hQb3MsIG1h
dGNoTGVuKSkpOwotICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobWF0Y2hQb3MpKTsKKyAgICAg
IGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHNvdXJjZS5zdWJzdHIobWF0Y2hQb3MsIG1hdGNo
TGVuKSkpOworICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXhlYywgbWF0Y2hQb3MpKTsKICAg
ICAgIGFyZ3MuYXBwZW5kKHNvdXJjZVZhbCk7CiAgICAgICAKICAgICAgIHJlcGxhY2VtZW50U3Ry
aW5nID0gcmVwbGFjZW1lbnRGdW5jdGlvbi0+Y2FsbChleGVjLCBleGVjLT5nbG9iYWxUaGlzVmFs
dWUoKSwgYXJncyktPnRvU3RyaW5nKGV4ZWMpOwogICB9CiAKLSAgcmV0dXJuIGpzU3RyaW5nKHNv
dXJjZS5zdWJzdHIoMCwgbWF0Y2hQb3MpICsgcmVwbGFjZW1lbnRTdHJpbmcgKyBzb3VyY2Uuc3Vi
c3RyKG1hdGNoUG9zICsgbWF0Y2hMZW4pKTsKKyAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNvdXJj
ZS5zdWJzdHIoMCwgbWF0Y2hQb3MpICsgcmVwbGFjZW1lbnRTdHJpbmcgKyBzb3VyY2Uuc3Vic3Ry
KG1hdGNoUG9zICsgbWF0Y2hMZW4pKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBA
IC00MzQsNyArNDM0LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0
ZQogICAgICAgdSA9IHMuc3Vic3RyKHN0YXRpY19jYXN0PGludD4oZHBvcyksIDEpOwogICAgIGVs
c2UKICAgICAgIHUgPSAiIjsKLSAgICByZXR1cm4ganNTdHJpbmcodSk7CisgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHUpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCkBA
IC00NDgsOSArNDQ4LDkgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVj
UwogICAgIEpTVmFsdWUqIGEwID0gYXJnc1swXTsKICAgICBkb3VibGUgZHBvcyA9IGEwLT50b0lu
dGVnZXIoZXhlYyk7CiAgICAgaWYgKGRwb3MgPj0gMCAmJiBkcG9zIDwgbGVuKQotICAgICAgcmVz
dWx0ID0ganNOdW1iZXIoc1tzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpXSk7CisgICAgICByZXN1bHQg
PSBqc051bWJlcihleGVjLCBzW3N0YXRpY19jYXN0PGludD4oZHBvcyldKTsKICAgICBlbHNlCi0g
ICAgICByZXN1bHQgPSBqc05hTigpOworICAgICAgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDYzLDcgKzQ2Myw3IEBAIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY0NvbmNhdChFeGVjU3RhdGUKICAgICBmb3IgKExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgcyArPSAoKml0KS0+
dG9TdHJpbmcoZXhlYyk7CiAgICAgfQotICAgIHJldHVybiBqc1N0cmluZyhzKTsKKyAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgcyk7CiB9CiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4
T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
QEAgLTQ4MCw3ICs0ODAsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNT
dGF0CiAgICAgICAgIGRwb3MgPSAwOwogICAgIGVsc2UgaWYgKGRwb3MgPiBsZW4pCiAgICAgICAg
IGRwb3MgPSBsZW47Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHMuZmluZCh1Miwgc3RhdGljX2Nhc3Q8
aW50PihkcG9zKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBzLmZpbmQodTIsIHN0YXRp
Y19jYXN0PGludD4oZHBvcykpKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFzdElu
ZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJn
cykKQEAgLTQ5OCw3ICs0OTgsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhP
ZihFeGVjCiAgICAgICAgIGRwb3MgPSAwOwogICAgIGVsc2UgaWYgKCEoZHBvcyA8PSBsZW4pKSAv
LyB0cnVlIGZvciBOYU4KICAgICAgICAgZHBvcyA9IGxlbjsKLSAgICByZXR1cm4ganNOdW1iZXIo
cy5yZmluZCh1Miwgc3RhdGljX2Nhc3Q8aW50PihkcG9zKSkpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBzLnJmaW5kKHUyLCBzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpKSk7CiB9CiAKIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC01MzcsNyArNTM3LDcgQEAgSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKgogICAgICAgTGlzdCBsaXN0OwogICAgICAgaW50IGxh
c3RJbmRleCA9IDA7CiAgICAgICB3aGlsZSAocG9zID49IDApIHsKLSAgICAgICAgbGlzdC5hcHBl
bmQoanNTdHJpbmcodS5zdWJzdHIocG9zLCBtYXRjaExlbmd0aCkpKTsKKyAgICAgICAgbGlzdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdS5zdWJzdHIocG9zLCBtYXRjaExlbmd0aCkpKTsKICAgICAg
ICAgbGFzdEluZGV4ID0gcG9zOwogICAgICAgICBwb3MgKz0gbWF0Y2hMZW5ndGggPT0gMCA/IDEg
OiBtYXRjaExlbmd0aDsKICAgICAgICAgcmVnRXhwT2JqLT5wZXJmb3JtTWF0Y2gocmVnLmdldCgp
LCB1LCBwb3MsIHBvcywgbWF0Y2hMZW5ndGgpOwpAQCAtNTc5LDcgKzU3OSw3IEBAIEpTVmFsdWUq
IHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUKICAgICBpbnQgcG9zOwogICAgIGludCBt
YXRjaExlbmd0aDsKICAgICByZWdFeHBPYmotPnBlcmZvcm1NYXRjaChyZWcuZ2V0KCksIHUsIDAs
IHBvcywgbWF0Y2hMZW5ndGgpOwotICAgIHJldHVybiBqc051bWJlcihwb3MpOworICAgIHJldHVy
biBqc051bWJlcihleGVjLCBwb3MpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNSZXBs
YWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3Mp
CkBAIC01ODksNyArNTg5LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVj
U3RhdAogCiAgICAgU3RyaW5nSW1wKiBzVmFsID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ0lu
c3RhbmNlOjppbmZvKSA/CiAgICAgICBzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHRoaXNP
YmopLT5pbnRlcm5hbFZhbHVlKCkgOgotICAgICAgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oanNT
dHJpbmcocykpOworICAgICAgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oanNTdHJpbmcoZXhlYywg
cykpOwogCiAgICAgSlNWYWx1ZSogYTAgPSBhcmdzWzBdOwogICAgIEpTVmFsdWUqIGExID0gYXJn
c1sxXTsKQEAgLTYxNiwxMCArNjE2LDEwIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NsaWNl
KEV4ZWNTdGF0ZSoKICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICBpZiAodG8gPiBsZW4p
CiAgICAgICAgICAgICB0byA9IGxlbjsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMuc3Vic3Ry
KHN0YXRpY19jYXN0PGludD4oZnJvbSksIHN0YXRpY19jYXN0PGludD4odG8gLSBmcm9tKSkpOwor
ICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcy5zdWJzdHIoc3RhdGljX2Nhc3Q8aW50Pihm
cm9tKSwgc3RhdGljX2Nhc3Q8aW50Pih0byAtIGZyb20pKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIiIpOwogfQogCiBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtNjQyLDcgKzY0Miw3IEBAIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSoKICAgICAgIFJlZ0V4cCAqcmVnID0gc3RhdGljX2Nh
c3Q8UmVnRXhwSW1wICo+KGEwKS0+cmVnRXhwKCk7CiAgICAgICBpZiAodS5pc0VtcHR5KCkgJiYg
cmVnLT5tYXRjaCh1LCAwKSA+PSAwKSB7CiAgICAgICAgIC8vIGVtcHR5IHN0cmluZyBtYXRjaGVk
IGJ5IHJlZ2V4cCAtPiBlbXB0eSBhcnJheQotICAgICAgICByZXMtPnB1dChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSk7CisgICAgICAgIHJlcy0+cHV0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDApKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICAgIHBvcyA9IDA7CkBAIC02NTQsNyAr
NjU0LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKgogICAgICAg
ICBpbnQgbWxlbiA9IG92ZWN0b3JbMV0gLSBvdmVjdG9yWzBdOwogICAgICAgICBwb3MgPSBtcG9z
ICsgKG1sZW4gPT0gMCA/IDEgOiBtbGVuKTsKICAgICAgICAgaWYgKG1wb3MgIT0gcDAgfHwgbWxl
bikgewotICAgICAgICAgIHJlcy0+cHV0KGV4ZWMsaSwganNTdHJpbmcodS5zdWJzdHIocDAsIG1w
b3MtcDApKSk7CisgICAgICAgICAgcmVzLT5wdXQoZXhlYyxpLCBqc1N0cmluZyhleGVjLCB1LnN1
YnN0cihwMCwgbXBvcy1wMCkpKTsKICAgICAgICAgICBwMCA9IG1wb3MgKyBtbGVuOwogICAgICAg
ICAgIGkrKzsKICAgICAgICAgfQpAQCAtNjYzLDcgKzY2Myw3IEBAIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSoKICAgICAgICAgICBpZiAoc3BvcyA8IDApCiAgICAgICAg
ICAgICByZXMtPnB1dChleGVjLCBpKyssIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlcy0+cHV0KGV4ZWMsIGkrKywganNTdHJpbmcodS5zdWJzdHIoc3Bvcywg
b3ZlY3RvcltzaSAqIDIgKyAxXSAtIHNwb3MpKSk7CisgICAgICAgICAgICByZXMtPnB1dChleGVj
LCBpKyssIGpzU3RyaW5nKGV4ZWMsIHUuc3Vic3RyKHNwb3MsIG92ZWN0b3Jbc2kgKiAyICsgMV0g
LSBzcG9zKSkpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTY3MSwxNSAr
NjcxLDE1IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSoKICAgICAg
IGlmICh1Mi5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKHUuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgLy8gZW1wdHkgc2VwYXJhdG9yIG1hdGNoZXMgZW1wdHkgc3RyaW5nIC0+IGVtcHR5IGFycmF5
Ci0gICAgICAgICAgcmVzLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMCkpOworICAgICAgICAgIHJlcy0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDApKTsKICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHdoaWxlIChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSkgIT0gbGltaXQgJiYgaSA8IHUuc2l6ZSgpLTEpCi0gICAgICAgICAgICByZXMtPnB1dChl
eGVjLCBpKyssIGpzU3RyaW5nKHUuc3Vic3RyKHAwKyssIDEpKSk7CisgICAgICAgICAgICByZXMt
PnB1dChleGVjLCBpKyssIGpzU3RyaW5nKGV4ZWMsIHUuc3Vic3RyKHAwKyssIDEpKSk7CiAgICAg
ICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSkgIT0gbGltaXQgJiYgKHBvcyA9IHUuZmluZCh1MiwgcDApKSA+PSAwKSB7Ci0gICAgICAg
ICAgcmVzLT5wdXQoZXhlYywgaSwganNTdHJpbmcodS5zdWJzdHIocDAsIHBvcy1wMCkpKTsKKyAg
ICAgICAgICByZXMtPnB1dChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB1LnN1YnN0cihwMCwgcG9z
IC0gcDApKSk7CiAgICAgICAgICAgcDAgPSBwb3MgKyB1Mi5zaXplKCk7CiAgICAgICAgICAgaSsr
OwogICAgICAgICB9CkBAIC02ODcsOCArNjg3LDggQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
U3BsaXQoRXhlY1N0YXRlKgogICAgIH0KICAgICAvLyBhZGQgcmVtYWluaW5nIHN0cmluZywgaWYg
YW55CiAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSAhPSBsaW1pdCkKLSAgICAgIHJl
cy0+cHV0KGV4ZWMsIGkrKywganNTdHJpbmcodS5zdWJzdHIocDApKSk7Ci0gICAgcmVzLT5wdXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoaSkpOworICAgICAg
cmVzLT5wdXQoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCB1LnN1YnN0cihwMCkpKTsKKyAgICBy
ZXMtPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVj
LCBpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzA0LDkgKzcwNCw5IEBAIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUKICAgICBkb3VibGUgc3RhcnQgPSBh
MC0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGRvdWJsZSBsZW5ndGggPSBhMS0+aXNVbmRlZmluZWQo
KSA/IGxlbiA6IGExLT50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKHN0YXJ0ID49IGxlbikKLSAg
ICAgIHJldHVybiBqc1N0cmluZygiIik7CisgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIiIp
OwogICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKyAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCAiIik7CiAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAg
c3RhcnQgKz0gbGVuOwogICAgICAgaWYgKHN0YXJ0IDwgMCkKQEAgLTcxNCw3ICs3MTQsNyBAQCBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlCiAgICAgfQogICAgIGlmIChs
ZW5ndGggPiBsZW4pCiAgICAgICBsZW5ndGggPSBsZW47Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHMu
c3Vic3RyKHN0YXRpY19jYXN0PGludD4oc3RhcnQpLCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcy5zdWJzdHIoc3RhdGljX2Nhc3Q8aW50Pihz
dGFydCksIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSkpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYgYXJncykKQEAgLTc0Nyw3ICs3NDcsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNTdWJzdHJpbmcoRXhlY1N0CiAgICAgICBlbmQgPSBzdGFydDsKICAgICAgIHN0YXJ0ID0gdGVt
cDsKICAgICB9Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHMuc3Vic3RyKChpbnQpc3RhcnQsIChpbnQp
ZW5kLShpbnQpc3RhcnQpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcy5zdWJzdHIoKGlu
dClzdGFydCwgKGludCllbmQtKGludClzdGFydCkpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JikKQEAgLTc1Nyw3ICs3NTcsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xv
d2VyQ2FzZShFeGVjCiAgICAgCiAgICAgU3RyaW5nSW1wKiBzVmFsID0gdGhpc09iai0+aW5oZXJp
dHMoJlN0cmluZ0luc3RhbmNlOjppbmZvKQogICAgICAgICA/IHN0YXRpY19jYXN0PFN0cmluZ0lu
c3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKQotICAgICAgICA6IHN0YXRpY19jYXN0
PFN0cmluZ0ltcCo+KGpzU3RyaW5nKHMpKTsKKyAgICAgICAgOiBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXAqPihqc1N0cmluZyhleGVjLCBzKSk7CiAgICAgaW50IHNzaXplID0gcy5zaXplKCk7CiAgICAg
aWYgKCFzc2l6ZSkKICAgICAgICAgcmV0dXJuIHNWYWw7CkBAIC03NzIsNyArNzcyLDcgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlYwogICAgIH0KICAgICBpZiAobGVu
Z3RoID09IHNzaXplICYmIG1lbWNtcChidWZmZXIuZGF0YSgpLCBzLmRhdGEoKSwgbGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSkgPT0gMCkKICAgICAgICAgcmV0dXJuIHNWYWw7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkpOwor
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCks
IGxlbmd0aCwgZmFsc2UpKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNh
c2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC03
ODIsNyArNzgyLDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlYwog
CiAgICAgU3RyaW5nSW1wKiBzVmFsID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ0luc3RhbmNl
OjppbmZvKQogICAgICAgICA/IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4odGhpc09iaikt
PmludGVybmFsVmFsdWUoKQotICAgICAgICA6IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KGpzU3Ry
aW5nKHMpKTsKKyAgICAgICAgOiBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPihqc1N0cmluZyhleGVj
LCBzKSk7CiAgICAgaW50IHNzaXplID0gcy5zaXplKCk7CiAgICAgaWYgKCFzc2l6ZSkKICAgICAg
ICAgcmV0dXJuIHNWYWw7CkBAIC03OTcsNyArNzk3LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jVG9VcHBlckNhc2UoRXhlYwogICAgIH0KICAgICBpZiAobGVuZ3RoID09IHNzaXplICYmIG1l
bWNtcChidWZmZXIuZGF0YSgpLCBzLmRhdGEoKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkgPT0g
MCkKICAgICAgICAgcmV0dXJuIHNWYWw7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFVTdHJpbmcoYnVm
ZmVyLnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkpOworICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsK
IH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCkBAIC04MDgsNyArODA4LDcg
QEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhcwogICAgIC8vIEZJWE1F
OiBTZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9TcGVjaWFsQ2FzaW5n
LnR4dCBmb3IgbG9jYWxlLXNlbnNpdGl2ZSBtYXBwaW5ncyB0aGF0IGFyZW4ndCBpbXBsZW1lbnRl
ZC4KICAgICBTdHJpbmdJbXAqIHNWYWwgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFu
Y2U6OmluZm8pCiAgICAgICAgID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPih0aGlzT2Jq
KS0+aW50ZXJuYWxWYWx1ZSgpCi0gICAgICAgIDogc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oanNT
dHJpbmcocykpOworICAgICAgICA6IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KGpzU3RyaW5nKGV4
ZWMsIHMpKTsKICAgICBpbnQgc3NpemUgPSBzLnNpemUoKTsKICAgICBpZiAoIXNzaXplKQogICAg
ICAgICByZXR1cm4gc1ZhbDsKQEAgLTgyMyw3ICs4MjMsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNUb0xvY2FsZUxvd2VyQ2FzCiAgICAgfQogICAgIGlmIChsZW5ndGggPT0gc3NpemUgJiYg
bWVtY21wKGJ1ZmZlci5kYXRhKCksIHMuZGF0YSgpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKSA9
PSAwKQogICAgICAgICByZXR1cm4gc1ZhbDsKLSAgICByZXR1cm4ganNTdHJpbmcoVVN0cmluZyhi
dWZmZXIucmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgsIGZhbHNlKSk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkp
OwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKQEAgLTgzMyw3ICs4MzMs
NyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzCiAKICAgICBTdHJp
bmdJbXAqIHNWYWwgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pCiAg
ICAgICAgID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxW
YWx1ZSgpCi0gICAgICAgIDogc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oanNTdHJpbmcocykpOwor
ICAgICAgICA6IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KGpzU3RyaW5nKGV4ZWMsIHMpKTsKICAg
ICBpbnQgc3NpemUgPSBzLnNpemUoKTsKICAgICBpZiAoIXNzaXplKQogICAgICAgICByZXR1cm4g
c1ZhbDsKQEAgLTg0OCw4MSArODQ4LDgxIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG9j
YWxlVXBwZXJDYXMKICAgICB9CiAgICAgaWYgKGxlbmd0aCA9PSBzc2l6ZSAmJiBtZW1jbXAoYnVm
ZmVyLmRhdGEoKSwgcy5kYXRhKCksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpID09IDApCiAgICAg
ICAgIHJldHVybiBzVmFsOwotICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nKGJ1ZmZlci5yZWxl
YXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
VVN0cmluZyhidWZmZXIucmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgsIGZhbHNlKSk7CiB9CiAKIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkg
PCAxKQotICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOworICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIDApOwogCiAgICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhp
c09iaiBpcyBhIFN0cmluZ0luc3RhbmNlCiAgICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJp
dHMoJlN0cmluZ0luc3RhbmNlOjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4o
dGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4
ZWMpOwogICAgIEpTVmFsdWUqIGEwID0gYXJnc1swXTsKLSAgICByZXR1cm4ganNOdW1iZXIobG9j
YWxlQ29tcGFyZShzLCBhMC0+dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgbG9jYWxlQ29tcGFyZShzLCBhMC0+dG9TdHJpbmcoZXhlYykpKTsKIH0KIAogSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmKQogewogICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0
aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdJbnN0YW5jZQogICAgIFVTdHJpbmcgcyA9IHRoaXNPYmot
PmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZTo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdJbnN0
YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzT2JqLT50b1N0
cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoIjxiaWc+IiArIHMgKyAiPC9iaWc+Iik7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8YmlnPiIgKyBzICsgIjwvYmlnPiIpOwogfQog
CiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29t
bW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nSW5zdGFuY2UKICAgICBVU3RyaW5nIHMg
PSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pID8gc3RhdGljX2Nhc3Q8
U3RyaW5nSW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhp
c09iai0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCI8c21hbGw+IiArIHMg
KyAiPC9zbWFsbD4iKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxzbWFsbD4iICsgcyAr
ICI8L3NtYWxsPiIpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKIHsKICAgICAvLyBUaGlz
IG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nSW5zdGFu
Y2UKICAgICBVU3RyaW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2U6Omlu
Zm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1
ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3Ry
aW5nKCI8Ymxpbms+IiArIHMgKyAiPC9ibGluaz4iKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgIjxibGluaz4iICsgcyArICI8L2JsaW5rPiIpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
KQogewogICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmog
aXMgYSBTdHJpbmdJbnN0YW5jZQogICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZT
dHJpbmdJbnN0YW5jZTo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHRoaXNP
YmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzT2JqLT50b1N0cmluZyhleGVjKTsK
LSAgICByZXR1cm4ganNTdHJpbmcoIjxiPiIgKyBzICsgIjwvYj4iKTsKKyAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgIjxiPiIgKyBzICsgIjwvYj4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlz
dCYpCiB7CiAgICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09i
aiBpcyBhIFN0cmluZ0luc3RhbmNlCiAgICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMo
JlN0cmluZ0luc3RhbmNlOjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4odGhp
c09iaiktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMp
OwotICAgIHJldHVybiBqc1N0cmluZygiPHR0PiIgKyBzICsgIjwvdHQ+Iik7CisgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsICI8dHQ+IiArIHMgKyAiPC90dD4iKTsKIH0KIAogSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhh
dCB0aGlzT2JqIGlzIGEgU3RyaW5nSW5zdGFuY2UKICAgICBVU3RyaW5nIHMgPSB0aGlzT2JqLT5p
bmhlcml0cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFu
Y2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJp
bmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCI8aT4iICsgcyArICI8L2k+Iik7CisgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8aT4iICsgcyArICI8L2k+Iik7CiB9CiAKIEpTVmFsdWUq
IHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2Ug
dGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nSW5zdGFuY2UKICAgICBVU3RyaW5nIHMgPSB0aGlzT2Jq
LT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5z
dGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9T
dHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCI8c3RyaWtlPiIgKyBzICsgIjwvc3Ry
aWtlPiIpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN0cmlrZT4iICsgcyArICI8L3N0
cmlrZT4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewogICAgIC8vIFRoaXMgb3B0aW1p
emVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdJbnN0YW5jZQogICAg
IFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZTo6aW5mbykgPyBz
dGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZh
bHVlKCkgOiB0aGlzT2JqLT50b1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoIjxz
dWI+IiArIHMgKyAiPC9zdWI+Iik7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c3ViPiIg
KyBzICsgIjwvc3ViPiIpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCiB7CiAgICAgLy8gVGhp
cyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ0luc3Rh
bmNlCiAgICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ0luc3RhbmNlOjpp
bmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpOwotICAgIHJldHVybiBqc1N0
cmluZygiPHN1cD4iICsgcyArICI8L3N1cD4iKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
IjxzdXA+IiArIHMgKyAiPC9zdXA+Iik7CiB9CiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0Zv
bnRjb2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBh
cmdzKQpAQCAtOTMwLDcgKzkzMCw3IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xv
cihFeGVjU3QKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlz
T2JqIGlzIGEgU3RyaW5nSW5zdGFuY2UKICAgICBVU3RyaW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0
cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPih0
aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhl
Yyk7CiAgICAgSlNWYWx1ZSogYTAgPSBhcmdzWzBdOwotICAgIHJldHVybiBqc1N0cmluZygiPGZv
bnQgY29sb3I9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9udD4i
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxmb250IGNvbG9yPVwiIiArIGEwLT50b1N0
cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC05MzgsNyArOTM4LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jRm9udHNpemUoRXhlY1N0YQogICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2Fz
ZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdJbnN0YW5jZQogICAgIFVTdHJpbmcgcyA9IHRoaXNP
YmotPmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZTo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdJ
bnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzT2JqLT50
b1N0cmluZyhleGVjKTsKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKCI8Zm9udCBzaXplPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyAr
ICI8L2ZvbnQ+Iik7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiAr
IGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtOTQ2LDcgKzk0Niw3IEBAIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29t
bW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nSW5zdGFuY2UKICAgICBVU3RyaW5nIHMg
PSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2U6OmluZm8pID8gc3RhdGljX2Nhc3Q8
U3RyaW5nSW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhp
c09iai0+dG9TdHJpbmcoZXhlYyk7CiAgICAgSlNWYWx1ZSogYTAgPSBhcmdzWzBdOwotICAgIHJl
dHVybiBqc1N0cmluZygiPGEgbmFtZT1cIiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiAr
IHMgKyAiPC9hPiIpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIgKyBh
MC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOwogfQogCiBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC05NTQsNyArOTU0LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jTGluayhFeGVjU3RhdGUqIAogICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2Fz
ZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdJbnN0YW5jZQogICAgIFVTdHJpbmcgcyA9IHRoaXNP
YmotPmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZTo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdJ
bnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzT2JqLT50
b1N0cmluZyhleGVjKTsKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKCI8YSBocmVmPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8
L2E+Iik7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8YSBocmVmPVwiIiArIGEwLT50b1N0
cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2E+Iik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdPYmplY3RJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC05NjUsMTAgKzk2NSwxMCBAQCBTdHJpbmdPYmplY3RJbXA6OlN0cmluZ09iamVj
dEltcChFeGVjU3RhCiAgIC8vIEVDTUEgMTUuNS4zLjEgU3RyaW5nLnByb3RvdHlwZQogICBwdXRE
aXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgc3RyaW5nUHJvdG8sIERvbnRF
bnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCi0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBTdHJp
bmdPYmplY3RGdW5jSW1wKGV4ZWMsIGZ1bmNQcm90bywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmZy
b21DaGFyQ29kZSksIERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBT
dHJpbmdPYmplY3RGdW5jSW1wKGV4ZWMsIGZ1bmNQcm90bywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmZyb21DaGFyQ29kZSksIERvbnRFbnVtKTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBj
b25zdHJ1Y3RvcgotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBwdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERv
bnREZWxldGV8RG9udEVudW0pOwogfQogCiAKQEAgLTk4MiwxOCArOTgyLDE4IEBAIEpTT2JqZWN0
ICpTdHJpbmdPYmplY3RJbXA6OmNvbnN0cnVjdChFeGUKIHsKICAgSlNPYmplY3QgKnByb3RvID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsKICAgaWYgKGFy
Z3Muc2l6ZSgpID09IDApCi0gICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZShwcm90byk7Ci0g
IHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2UocHJvdG8sIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdJbnN0YW5jZShleGVjLCBwcm90byk7Cisg
IHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ0luc3RhbmNlKGV4ZWMsIHByb3RvLCBhcmdzWzBdLT50
b1N0cmluZyhleGVjKSk7CiB9CiAKIC8vIEVDTUEgMTUuNS4xCiBKU1ZhbHVlICpTdHJpbmdPYmpl
Y3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QqIC8qdGhpc09i
aiovLCBjb25zdCBMaXN0ICZhcmdzKQogewogICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAgcmV0
dXJuIGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIiIpOwogICBlbHNl
IHsKICAgICBKU1ZhbHVlICp2ID0gYXJnc1swXTsKLSAgICByZXR1cm4ganNTdHJpbmcodi0+dG9T
dHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2LT50b1N0cmluZyhleGVj
KSk7CiAgIH0KIH0KIApAQCAtMTAwMyw3ICsxMDAzLDcgQEAgSlNWYWx1ZSAqU3RyaW5nT2JqZWN0
SW1wOjpjYWxsQXNGdW5jdGlvbgogU3RyaW5nT2JqZWN0RnVuY0ltcDo6U3RyaW5nT2JqZWN0RnVu
Y0ltcChFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8sIGNvbnN0
IElkZW50aWZpZXImIG5hbWUpCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIG5h
bWUpCiB7Ci0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cigxKSwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CisgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgRG9udERlbGV0ZXxSZWFk
T25seXxEb250RW51bSk7CiB9CiAKIEpTVmFsdWUgKlN0cmluZ09iamVjdEZ1bmNJbXA6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QqIC8qdGhpc09iaiovLCBjb25zdCBM
aXN0ICZhcmdzKQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAgSlNWYWx1ZSAqU3RyaW5nT2JqZWN0RnVu
Y0ltcDo6Y2FsbEFzRnVuYwogICB9IGVsc2UKICAgICBzID0gIiI7CiAKLSAgcmV0dXJuIGpzU3Ry
aW5nKHMpOworICByZXR1cm4ganNTdHJpbmcoZXhlYywgcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCShyZXZpc2lvbiAzMjc1NykK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDkgKzMxLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgU3RyaW5nSW5zdGFuY2Ug
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgcHVibGljOgotICAgIFN0cmluZ0luc3RhbmNl
KEpTT2JqZWN0ICpwcm90byk7CisgICAgU3RyaW5nSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqIHByb3RvKTsKICAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJvdG8sIFN0cmluZ0lt
cCopOwotICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bywgY29uc3QgVVN0cmluZyYp
OworICAgIFN0cmluZ0luc3RhbmNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBwcm90bywgY29uc3Qg
VVN0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwpAQCAtNTcsOCArNTcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgLy8gV2Vi
Q29yZSB1c2VzIHRoaXMgdG8gbWFrZSBzdHlsZS5maWx0ZXIgdW5kZXRlY3RhYmxlCiAgIGNsYXNz
IFN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgOiBwdWJsaWMgU3RyaW5n
SW5zdGFuY2UgewogICBwdWJsaWM6Ci0gICAgICBTdHJpbmdJbnN0YW5jZVRoYXRNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKEpTT2JqZWN0KiBwcm90bywgY29uc3QgVVN0cmluZyYgc3RyaW5nKQotICAg
ICAgICAgIDogU3RyaW5nSW5zdGFuY2UocHJvdG8sIHN0cmluZykgeyB9CisgICAgICBTdHJpbmdJ
bnN0YW5jZVRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHByb3RvLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCisgICAgICAgICAgOiBTdHJpbmdJbnN0
YW5jZShleGVjLCBwcm90bywgc3RyaW5nKSB7IH0KICAgICAgIHZpcnR1YWwgYm9vbCBtYXNxdWVy
YWRlQXNVbmRlZmluZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgICB2aXJ0dWFsIGJv
b2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIH07Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdGVzdGtqcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL3Rlc3RranMuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy90ZXN0a2pzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE4ICsxMzEsMTggQEAg
Q09NUElMRV9BU1NFUlQoIUlzSW50ZWdlcjxHbG9iYWxPYmplY3Q+OgogCiBHbG9iYWxPYmplY3Q6
Okdsb2JhbE9iamVjdChWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cykKIHsKLSAgICBwdXREaXJl
Y3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBmdW5jdGlvblBy
b3RvdHlwZSgpLCAxLCAiZGVidWciLCBmdW5jdGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5
cGUoKSwgMSwgInByaW50IiwgZnVuY3Rpb25QcmludCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCks
IDAsICJxdWl0IiwgZnVuY3Rpb25RdWl0KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFBy
b3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMCwgImdj
IiwgZnVuY3Rpb25HQykpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5j
dGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDEsICJ2ZXJzaW9uIiwgZnVu
Y3Rpb25WZXJzaW9uKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgInJ1biIsIGZ1bmN0aW9u
UnVuKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgImxvYWQiLCBmdW5jdGlvbkxvYWQpKTsK
LSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFsRXhlYygp
LCBmdW5jdGlvblByb3RvdHlwZSgpLCAwLCAicmVhZGxpbmUiLCBmdW5jdGlvblJlYWRsaW5lKSk7
CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMSwgImRlYnVnIiwgZnVuY3Rp
b25EZWJ1ZykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90
b3R5cGVGdW5jdGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDEsICJwcmlu
dCIsIGZ1bmN0aW9uUHJpbnQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGdsb2JhbEV4
ZWMoKSkgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBmdW5jdGlvblByb3RvdHlwZSgp
LCAwLCAicXVpdCIsIGZ1bmN0aW9uUXVpdCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAo
Z2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJv
dG90eXBlKCksIDAsICJnYyIsIGZ1bmN0aW9uR0MpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihu
ZXcgKGdsb2JhbEV4ZWMoKSkgUHJvdG90eXBlRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBmdW5jdGlv
blByb3RvdHlwZSgpLCAxLCAidmVyc2lvbiIsIGZ1bmN0aW9uVmVyc2lvbikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihnbG9iYWxF
eGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDEsICJydW4iLCBmdW5jdGlvblJ1bikpOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihn
bG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDEsICJsb2FkIiwgZnVuY3Rpb25Mb2Fk
KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChnbG9iYWxFeGVjKCkpIFByb3RvdHlwZUZ1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwgMCwgInJlYWRsaW5lIiwg
ZnVuY3Rpb25SZWFkbGluZSkpOwogCiAgICAgSlNPYmplY3QqIGFycmF5ID0gYXJyYXlDb25zdHJ1
Y3RvcigpLT5jb25zdHJ1Y3QoZ2xvYmFsRXhlYygpLCBnbG9iYWxFeGVjKCktPmVtcHR5TGlzdCgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgYXJyYXktPnB1dChnbG9iYWxFeGVjKCksIGksIGpzU3RyaW5nKGFyZ3VtZW50c1tpXSkp
OworICAgICAgICBhcnJheS0+cHV0KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhl
YygpLCBhcmd1bWVudHNbaV0pKTsKICAgICBwdXREaXJlY3QoImFyZ3VtZW50cyIsIGFycmF5KTsK
IAogICAgIEludGVycHJldGVyOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnModHJ1ZSk7CkBAIC0x
NjEsMTAgKzE2MSwxMCBAQCBKU1ZhbHVlKiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSogZXhlYywg
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIGZ1bmN0aW9uR0MoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0JikKK0pTVmFsdWUqIGZ1bmN0aW9uR0MoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmKQogewogICAgIEpTTG9jayBsb2Nr
OwotICAgIENvbGxlY3Rvcjo6Y29sbGVjdCgpOworICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdCgp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xODcsNyArMTg3LDcgQEAgSlNW
YWx1ZSogZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIEludGVycHJldGVyOjpl
dmFsdWF0ZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgZmlsZU5h
bWUsIDAsIHNjcmlwdC5kYXRhKCkpOwogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICByZXR1
cm4ganNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKIH0KIAogSlNWYWx1ZSogZnVuY3Rp
b25Mb2FkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAt
MjAyLDcgKzIwMiw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMsIEoK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25SZWFkbGlu
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKQorSlNWYWx1ZSogZnVuY3Rpb25S
ZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpCiB7CiAgICAg
VmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKICAgICBpbnQgYzsKQEAgLTIxMyw3ICsyMTMsNyBAQCBK
U1ZhbHVlKiBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSosIEpTCiAgICAgICAgIGxpbmUuYXBw
ZW5kKGMpOwogICAgIH0KICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICByZXR1cm4ganNTdHJp
bmcobGluZS5kYXRhKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBsaW5lLmRhdGEoKSk7
CiB9CiAKIEpTVmFsdWUqIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IExpc3QmKQpAQCAtMzQ1LDcgKzM0NSw3IEBAIGludCBranNtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKICAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhmaWxlTmFtZXMsIGFyZ3Vt
ZW50cywgcHJldHR5UHJpbnQpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIENvbGxlY3Rvcjo6Y29s
bGVjdCgpOworICAgIEhlYXA6OnRocmVhZEhlYXAoKS0+Y29sbGVjdCgpOwogI2VuZGlmCiAKICAg
ICByZXR1cm4gc3VjY2VzcyA/IDAgOiAzOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3VzdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCShyZXZpc2lv
biAzMjc1NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5Niw3ICszOTYsNyBAQCBpbmxpbmUgdW5zaWduZWQgVVN0cmluZzo6dG9BcnJheUluZGV4
KGJvCiAvLyBodWdlIGJ1ZmZlci4KIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBzaXplX3QgYnV0
IHRoYXQgd291bGQgY2F1c2Ugd2FybmluZ3MgdW50aWwgd2UKIC8vIGZpeCBVU3RyaW5nIHNpemVz
IHRvIGJlIHNpemVfdCBpbnN0ZWFkIG9mIGludAotc3RhdGljIGNvbnN0IGludCBtaW5TaGFyZVNp
emUgPSBDb2xsZWN0b3I6Om1pbkV4dHJhQ29zdFNpemUgLyBzaXplb2YoVUNoYXIpOworc3RhdGlj
IGNvbnN0IGludCBtaW5TaGFyZVNpemUgPSBIZWFwOjptaW5FeHRyYUNvc3RTaXplIC8gc2l6ZW9m
KFVDaGFyKTsKIAogaW5saW5lIHNpemVfdCBVU3RyaW5nOjpjb3N0KCkgY29uc3QKIHsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3ZhbHVlLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
dmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCw5IEBAIGV4dGVybiBjb25zdCBk
b3VibGUgSW5mID0gTmFOSW5mLmRvdWJsZXMKIHN0YXRpYyBjb25zdCBkb3VibGUgRDE2ID0gNjU1
MzYuMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgRDMyID0gNDI5NDk2NzI5Ni4wOwogCi12b2lkICpK
U0NlbGw6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIEpTQ2VsbDo6b3BlcmF0b3Ig
bmV3KHNpemVfdCBzaXplLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIENvbGxlY3Rv
cjo6YWxsb2NhdGUoc2l6ZSk7CisgICAgcmV0dXJuIGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6
ZSk7CiB9CiAKIGJvb2wgSlNDZWxsOjpnZXRVSW50MzIodWludDMyX3QmKSBjb25zdApAQCAtMjA3
LDI2ICsyMDcsMjYgQEAgY29uc3QgSlNPYmplY3QgKkpTQ2VsbDo6Z2V0T2JqZWN0KCkgY29ucwog
ICAgIHJldHVybiBpc09iamVjdCgpID8gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QgKj4odGhp
cykgOiAwOwogfQogCi1KU0NlbGwqIGpzU3RyaW5nKGNvbnN0IGNoYXIqIHMpCitKU0NlbGwqIGpz
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogcykKIHsKLSAgICByZXR1cm4gbmV3
IFN0cmluZ0ltcChzID8gcyA6ICIiKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdJbXAo
cyA/IHMgOiAiIik7CiB9CiAKLUpTQ2VsbCoganNTdHJpbmcoY29uc3QgVVN0cmluZyYgcykKK0pT
Q2VsbCoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQogewotICAg
IHJldHVybiBzLmlzTnVsbCgpID8gbmV3IFN0cmluZ0ltcCgiIikgOiBuZXcgU3RyaW5nSW1wKHMp
OworICAgIHJldHVybiBzLmlzTnVsbCgpID8gbmV3IChleGVjKSBTdHJpbmdJbXAoIiIpIDogbmV3
IChleGVjKSBTdHJpbmdJbXAocyk7CiB9CiAKLUpTQ2VsbCoganNPd25lZFN0cmluZyhjb25zdCBV
U3RyaW5nJiBzKQorSlNDZWxsKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VVN0cmluZyYgcykKIHsKLSAgICByZXR1cm4gcy5pc051bGwoKSA/IG5ldyBTdHJpbmdJbXAoIiIs
IFN0cmluZ0ltcDo6SGFzT3RoZXJPd25lcikgOiBuZXcgU3RyaW5nSW1wKHMsIFN0cmluZ0ltcDo6
SGFzT3RoZXJPd25lcik7CisgICAgcmV0dXJuIHMuaXNOdWxsKCkgPyBuZXcgKGV4ZWMpIFN0cmlu
Z0ltcCgiIiwgU3RyaW5nSW1wOjpIYXNPdGhlck93bmVyKSA6IG5ldyAoZXhlYykgU3RyaW5nSW1w
KHMsIFN0cmluZ0ltcDo6SGFzT3RoZXJPd25lcik7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGluY2x1
ZGVzIGEgUElDIGJyYW5jaCB0byBzZXQgdXAgdGhlIE51bWJlckltcCdzIHZ0YWJsZSwgc28gd2Ug
cXVhcmFudGluZQogLy8gaXQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBrZWVwIHRoZSBub3Jt
YWwgY2FzZSBzcGVlZHkuCi1KU1ZhbHVlICpqc051bWJlckNlbGwoZG91YmxlIGQpCitKU1ZhbHVl
KiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgZCkKIHsKLSAgICByZXR1cm4g
bmV3IE51bWJlckltcChkKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBOdW1iZXJJbXAoZCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHJldmlzaW9uIDMyNzU3
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgc3RydWN0IENsYXNzSW5mbzsKICAqLwogY2xhc3MgSlNWYWx1ZSA6IE5vbmNvcHlh
YmxlIHsKICAgICBmcmllbmQgY2xhc3MgSlNDZWxsOyAvLyBzbyBpdCBjYW4gZGVyaXZlIGZyb20g
dGhpcyBjbGFzcwotICAgIGZyaWVuZCBjbGFzcyBDb2xsZWN0b3I7IC8vIHNvIGl0IGNhbiBjYWxs
IGFzQ2VsbCgpCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7IC8vIHNvIGl0IGNhbiBjYWxsIGFzQ2Vs
bCgpCiAKIHByaXZhdGU6CiAgICAgSlNWYWx1ZSgpOwpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZh
dGU6CiB9OwogCiBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgSlNWYWx1ZSB7Ci0gICAgZnJpZW5kIGNs
YXNzIENvbGxlY3RvcjsKKyAgICBmcmllbmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3Mg
TnVtYmVySW1wOwogICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdJbXA7CiAgICAgZnJpZW5kIGNsYXNz
IEpTT2JqZWN0OwpAQCAtMTYzLDIwICsxNjMsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNP
YmplY3QgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgPSAwOwogCiAgICAgLy8gR2Fy
YmFnZSBjb2xsZWN0aW9uLgotICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QpOworICAgIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7CiAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKIH07CiAKLUpTVmFsdWUgKmpzTnVtYmVy
Q2VsbChkb3VibGUpOworSlNWYWx1ZSoganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7
CiAKLUpTQ2VsbCAqanNTdHJpbmcoY29uc3QgVVN0cmluZyYpOyAvLyByZXR1cm5zIGVtcHR5IHN0
cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKLUpTQ2VsbCAqanNTdHJpbmcoY29uc3QgY2hhciog
PSAiIik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCAwCitKU0NlbGwqIGpzU3Ry
aW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcg
aWYgcGFzc2VkIG51bGwgc3RyaW5nCitKU0NlbGwqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0
IGNoYXIqID0gIiIpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgMAogCiAvLyBz
aG91bGQgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3QgdGhh
dCB3aWxsCiAvLyBsaWtlbHkgb3V0bGl2ZSB0aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNoIGFz
IHRoZSBwYXJzZSB0cmVlIG9yIGEKIC8vIERPTSBvYmplY3QgdGhhdCBjb250YWlucyBhIFVTdHJp
bmcKLUpTQ2VsbCAqanNPd25lZFN0cmluZyhjb25zdCBVU3RyaW5nJik7IAorSlNDZWxsKiBqc093
bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsKIAogZXh0ZXJuIGNvbnN0IGRv
dWJsZSBOYU47CiBleHRlcm4gY29uc3QgZG91YmxlIEluZjsKQEAgLTE5MSw5ICsxOTEsOSBAQCBp
bmxpbmUgSlNWYWx1ZSAqanNOdWxsKCkKICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1l
ZGlhdGUoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUgKmpzTmFOKCkKK2lubGluZSBKU1ZhbHVlKiBq
c05hTihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChOYU4pOwor
ICAgIHJldHVybiBqc051bWJlckNlbGwoZXhlYywgTmFOKTsKIH0KIAogaW5saW5lIEpTVmFsdWUg
KmpzQm9vbGVhbihib29sIGIpCkBAIC0yMDEsNTMgKzIwMSw1MyBAQCBpbmxpbmUgSlNWYWx1ZSAq
anNCb29sZWFuKGJvb2wgYikKICAgICByZXR1cm4gYiA/IEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRp
YXRlKCkgOiBKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBqc051bWJlcihkb3VibGUgZCkKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgZCkKIHsKICAgICBKU1ZhbHVlKiB2ID0gSlNJ
bW1lZGlhdGU6OmZyb20oZCk7Ci0gICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGQpOwor
ICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBkKTsKIH0KIAotQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBqc051bWJlcihpbnQgaSkKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgaSkKIHsKICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1l
ZGlhdGU6OmZyb20oaSk7Ci0gICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGkpOworICAg
IHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBqc051bWJlcih1bnNpZ25lZCBpKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBq
c051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNWYWx1ZSogdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwotICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChp
KTsKKyAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgaSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIobG9uZyBpKQorQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgaSkKIHsKICAgICBKU1ZhbHVlKiB2ID0g
SlNJbW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGkp
OworICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKIH0KIAotQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBqc051bWJlcih1bnNpZ25lZCBsb25nIGkpCitBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9uZyBpKQogewog
ICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKLSAgICByZXR1cm4gdiA/IHYg
OiBqc051bWJlckNlbGwoaSk7CisgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMs
IGkpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKGxvbmcgbG9uZyBpKQor
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgbG9u
ZyBpKQogewogICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKLSAgICByZXR1
cm4gdiA/IHYgOiBqc051bWJlckNlbGwoc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CisgICAgcmV0
dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9uZyBp
KQorQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGxvbmcgbG9uZyBpKQogewogICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShp
KTsKLSAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoc3RhdGljX2Nhc3Q8ZG91YmxlPihp
KSk7CisgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIHN0YXRpY19jYXN0PGRv
dWJsZT4oaSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyRnJvbUFuZChF
eGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKIHsKICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCiAgICAgICAgIHJldHVy
biBKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpOwotICAgIHJldHVybiBq
c051bWJlcih2MS0+dG9JbnQzMihleGVjKSAmIHYyLT50b0ludDMyKGV4ZWMpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgdjEtPnRvSW50MzIoZXhlYykgJiB2Mi0+dG9JbnQzMihleGVjKSk7
CiB9CiAKIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKQEAgLTI4MywxMiArMjgzLDEyIEBAIGlu
bGluZSBib29sIEpTQ2VsbDo6aXNPYmplY3QoKSBjb25zdAogCiBpbmxpbmUgYm9vbCBKU0NlbGw6
Om1hcmtlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvbGxlY3Rvcjo6aXNDZWxsTWFya2VkKHRo
aXMpOworICAgIHJldHVybiBIZWFwOjppc0NlbGxNYXJrZWQodGhpcyk7CiB9CiAKIGlubGluZSB2
b2lkIEpTQ2VsbDo6bWFyaygpCiB7Ci0gICAgcmV0dXJuIENvbGxlY3Rvcjo6bWFya0NlbGwodGhp
cyk7CisgICAgcmV0dXJuIEhlYXA6Om1hcmtDZWxsKHRoaXMpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKU1ZhbHVlOjp0b051bWJlcihFCiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
SlNWYWx1ZTo6dG9KU051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IEpTSW1tZWRpYXRlOjppc051bWJlcih0aGlzKSA/IGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KHRoaXMp
IDoganNOdW1iZXIodGhpcy0+dG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBKU0ltbWVkaWF0
ZTo6aXNOdW1iZXIodGhpcykgPyBjb25zdF9jYXN0PEpTVmFsdWUqPih0aGlzKSA6IGpzTnVtYmVy
KGV4ZWMsIHRoaXMtPnRvTnVtYmVyKGV4ZWMpKTsKIH0KIAogaW5saW5lIFVTdHJpbmcgSlNWYWx1
ZTo6dG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZFNwZWNpZmljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZFNwZWNpZmljLmgJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZFNwZWNpZmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBpbmxpbmUg
VGhyZWFkU3BlY2lmaWM8VD46Om9wZXJhdG9yIFQqKCkKIHsKICAgICBUKiBwdHIgPSBzdGF0aWNf
Y2FzdDxUKj4oZ2V0KCkpOwogICAgIGlmICghcHRyKSB7Ci0gICAgICAgIHB0ciA9IG5ldyBUOwor
ICAgICAgICBwdHIgPSBuZXcgVCgpOwogICAgICAgICBzZXQocHRyKTsKICAgICB9CiAgICAgcmV0
dXJuIHB0cjsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdEds
dWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDgtMDUtMDEg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODgyNgorICAgICAgICBNYWtlIEphdmFTY3JpcHQgaGVhcCBwZXItdGhy
ZWFkCisKKyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6CisgICAgICAgICogSlNVdGlscy5o
OgorICAgICAgICBNb3ZlZCBnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKSB0byBKU1V0aWxzIGFu
ZCBtYWRlIGl0IGV4dGVybiwgYXMgRXhlY1N0YXRlIGlzIG5vdyBuZWVkZWQKKyAgICAgICAgZm9y
IGFsbCBKUyBhbGxvY2F0aW9ucy4KKworICAgICAgICAqIEpTVXRpbHMuY3BwOgorICAgICAgICAo
SlNPYmplY3RLSlNWYWx1ZSk6IFBhc3MgRXhlY1N0YXRlIHRvIGZ1bmN0aW9ucyB0aGF0IG5vdyBu
ZWVkIGl0LgorICAgICAgICAodW5wcm90ZWN0R2xvYmFsT2JqZWN0KTogTW92ZWQgZnJvbSBKU1Zh
bHVlV3JhcHBlci5jcHAuCisgICAgICAgIChpbml0aWFsaXplR2xvYmFsT2JqZWN0S2V5KTogRGl0
dG8uCisgICAgICAgIChnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUpOiBEaXR0by4KKworICAgICAg
ICAqIFVzZXJPYmplY3RJbXAuY3BwOiAoVXNlck9iamVjdEltcDo6dG9QcmltaXRpdmUpOiBQYXNz
IEV4ZWNTdGF0ZSB0byBqc1N0cmluZyBhbmQganNOdW1iZXIuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0R2x1ZS5jcHA6CisgICAgICAgIChKU0NvbGxlY3QpOiBVc2UgY3VycmVudCB0aHJlYWQncyBo
ZWFwLgorICAgICAgICAoSlNMb2NrSW50ZXJwcmV0ZXIpOiBSZW1vdmVkIEpTTG9jazo6cmVnaXN0
ZXJUaHJlYWQoKSwgYmVjYXVzZSBhIEpTIGhlYXAgZG9lc24ndCBuZWVkIHRvCisgICAgICAgIGtu
b3cgYWJvdXQgb3RoZXIgdGhyZWFkcy4KKwogMjAwOC0wNC0yNSAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBK
YXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9K
U1V0aWxzLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDE0ICsxNTUsMTQgQEAgSlNWYWx1ZSAqSlNPYmplY3RL
SlNWYWx1ZShKU1VzZXJPYmplY3QqIAogICAgICAgICAgICAgICAgICAgICBDRlR5cGVJRCB0eXBl
SUQgPSBDRkdldFR5cGVJRChjZlR5cGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAodHlwZUlE
ID09IENGU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKENGU3RyaW5nVG9VU3RyaW5nKChDRlN0
cmluZ1JlZiljZlR5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzU3Ry
aW5nKGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLCBDRlN0cmluZ1RvVVN0cmluZygoQ0ZTdHJp
bmdSZWYpY2ZUeXBlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBl
SUQgPT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIG51bTsKICAgICAgICAgICAgICAgICAgICAgICAgIENG
TnVtYmVyR2V0VmFsdWUoKENGTnVtYmVyUmVmKWNmVHlwZSwga0NGTnVtYmVyRG91YmxlVHlwZSwg
Jm51bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc051bWJlcihudW0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoZ2V0VGhyZWFkR2xvYmFs
RXhlY1N0YXRlKCksIG51bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0
eXBlSUQgPT0gQ0ZCb29sZWFuR2V0VHlwZUlEKCkpCkBAIC0xODEsNyArMTgxLDcgQEAgSlNWYWx1
ZSAqSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIAogICAgICAgICB9CiAgICAgICAgIGlm
ICghaGFuZGxlZCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVzZXJPYmpl
Y3RJbXAocHRyKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAoZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCkpIFVzZXJPYmplY3RJbXAocHRyKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMzc4LDMgKzM3OCw1MCBAQCBDRlR5cGVSZWYgR2V0Q0ZOdWxsKHZvaWQp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIFRoaXMgaXMgYSBzbGlnaHQgaGFjay4g
VGhlIEpTR2x1ZSBBUEkgaGFzIG5vIGNvbmNlcHQgb2YgZXhlY3V0aW9uIHN0YXRlLgorICogSG93
ZXZlciwgZXhlY3V0aW9uIHN0YXRlIGlzIGFuIGluaGVyZW50IHBhcnQgb2YgSlMsIGFuZCBKU0Nv
cmUgcmVxdWlyZXMgaXQuCisgKiBTbywgd2Uga2VlcCBhIHNpbmdsZSBleGVjdXRpb24gc3RhdGUg
Zm9yIHRoZSB3aG9sZSB0aHJlYWQgYW5kIHN1cHBseSBpdAorICogd2hlcmUgbmVjZXNzYXJ5Lgor
CisgKiBUaGUgZXhlY3V0aW9uIHN0YXRlIGhvbGRzIHR3byB0aGluZ3M6ICgxKSBleGNlcHRpb25z
OyAoMikgdGhlIGdsb2JhbCBvYmplY3QuIAorICogSlNHbHVlIGhhcyBubyBBUEkgZm9yIGFjY2Vz
c2luZyBleGNlcHRpb25zLCBzbyB3ZSBqdXN0IGRpc2NhcmQgdGhlbS4gQXMgZm9yCisgKiB0aGUg
Z2xvYmFsIG9iamVjdCwgSlNHbHVlIGluY2x1ZGVzIG5vIGNhbGxzIHRoYXQgZGVwZW5kIG9uIGl0
LiBJdHMgcHJvcGVydHkKKyAqIGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIHBlci1vYmplY3Q7IHRo
ZXkgZG9uJ3Qgd2FsayB1cCB0aGUgZW5jbG9zaW5nIHNjb3BlLiAKKyAqIEZ1bmN0aW9ucyBjYWxs
ZWQgYnkgSlNPYmplY3RDYWxsRnVuY3Rpb24gbWF5IHJlZmVyZW5jZSB2YWx1ZXMgaW4gdGhlIGVu
Y2xvc2luZyAKKyAqIHNjb3BlLCBidXQgdGhleSBkbyBzbyB0aHJvdWdoIGFuIGludGVybmFsbHkg
c3RvcmVkIHNjb3BlIGNoYWluLCBzbyB3ZSBkb24ndCAKKyAqIG5lZWQgdG8gc3VwcGx5IHRoZSBn
bG9iYWwgc2NvcGUuCisgKi8gICAgICAKKworcHRocmVhZF9rZXlfdCBnbG9iYWxPYmplY3RLZXk7
CitwdGhyZWFkX29uY2VfdCBnbG9iYWxPYmplY3RLZXlPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7
CisKK3N0YXRpYyB2b2lkIHVucHJvdGVjdEdsb2JhbE9iamVjdCh2b2lkKiBkYXRhKSAKK3sKKyAg
ICBKU0xvY2sgbG9jazsKKyAgICBnY1VucHJvdGVjdChzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVj
dCo+KGRhdGEpKTsKK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbE9iamVjdEtleSgp
Cit7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCZnbG9iYWxPYmplY3RLZXksIHVucHJvdGVjdEds
b2JhbE9iamVjdCk7Cit9CisKK0V4ZWNTdGF0ZSogZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCkK
K3sKKyAgICBwdGhyZWFkX29uY2UoJmdsb2JhbE9iamVjdEtleU9uY2UsIGluaXRpYWxpemVHbG9i
YWxPYmplY3RLZXkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0dsb2JhbE9iamVjdCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5
KSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgZ2xvYmFsT2JqZWN0ID0gbmV3
IEpTR2x1ZUdsb2JhbE9iamVjdDsKKyAgICAgICAgZ2NQcm90ZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5LCBnbG9iYWxPYmplY3Qp
OworICAgIH0KKyAgICAKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKKworICAgIC8vIERpc2NhcmQgZXhjZXB0aW9ucyAtLSBvdGhlcndpc2UgYW4gZXhj
ZXB0aW9uIHdvdWxkIGZvcmVzdGFsbCBKUyAKKyAgICAvLyBldmFsdWF0aW9uIHRocm91Z2hvdXQg
dGhlIHRocmVhZAorICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGV4ZWM7
Cit9CisKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9KU1V0aWxzLmgJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2YVNjcmlwdEdsdWUv
SlNVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIENGVHlwZVJlZiBHZXRD
Rk51bGwodm9pZCk7CiBpbmxpbmUgQ0ZUeXBlUmVmIFJldGFpbkNGVHlwZShDRlR5cGVSZWYgeCkg
eyBpZiAoeCkgeCA9IENGUmV0YWluKHgpOyByZXR1cm4geDsgfQogaW5saW5lIHZvaWQgUmVsZWFz
ZUNGVHlwZShDRlR5cGVSZWYgeCkgeyBpZiAoeCkgQ0ZSZWxlYXNlKHgpOyAgfQogCitFeGVjU3Rh
dGUqIGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpOworCiBlbnVtIHsKICAgICBrSlNJbnZhbGlk
VHlwZUlEID0gMCwKICAgICBrSlNPYmplY3RUeXBlSUQsCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9K
U1ZhbHVlV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdy
YXBwZXIuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFw
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNTMgKzQ2LDYgQEAgSlNWYWx1ZSAqSlNWYWx1
ZVdyYXBwZXI6OkdldFZhbHVlKCkKICAgICByZXR1cm4gZlZhbHVlOwogfQogCi0vKgotICogVGhp
cyBpcyBhIHNsaWdodCBoYWNrLiBUaGUgSlNHbHVlIEFQSSBoYXMgbm8gY29uY2VwdCBvZiBleGVj
dXRpb24gc3RhdGUuCi0gKiBIb3dldmVyLCBleGVjdXRpb24gc3RhdGUgaXMgYW4gaW5oZXJlbnQg
cGFydCBvZiBKUywgYW5kIEpTQ29yZSByZXF1aXJlcyBpdC4KLSAqIFNvLCB3ZSBrZWVwIGEgc2lu
Z2xlIGV4ZWN1dGlvbiBzdGF0ZSBmb3IgdGhlIHdob2xlIHRocmVhZCBhbmQgc3VwcGx5IGl0Ci0g
KiB3aGVyZSBuZWNlc3NhcnkuCi0KLSAqIFRoZSBleGVjdXRpb24gc3RhdGUgaG9sZHMgdHdvIHRo
aW5nczogKDEpIGV4Y2VwdGlvbnM7ICgyKSB0aGUgZ2xvYmFsIG9iamVjdC4gCi0gKiBKU0dsdWUg
aGFzIG5vIEFQSSBmb3IgYWNjZXNzaW5nIGV4Y2VwdGlvbnMsIHNvIHdlIGp1c3QgZGlzY2FyZCB0
aGVtLiBBcyBmb3IKLSAqIHRoZSBnbG9iYWwgb2JqZWN0LCBKU0dsdWUgaW5jbHVkZXMgbm8gY2Fs
bHMgdGhhdCBkZXBlbmQgb24gaXQuIEl0cyBwcm9wZXJ0eQotICogZ2V0dGVycyBhbmQgc2V0dGVy
cyBhcmUgcGVyLW9iamVjdDsgdGhleSBkb24ndCB3YWxrIHVwIHRoZSBlbmNsb3Npbmcgc2NvcGUu
IAotICogRnVuY3Rpb25zIGNhbGxlZCBieSBKU09iamVjdENhbGxGdW5jdGlvbiBtYXkgcmVmZXJl
bmNlIHZhbHVlcyBpbiB0aGUgZW5jbG9zaW5nIAotICogc2NvcGUsIGJ1dCB0aGV5IGRvIHNvIHRo
cm91Z2ggYW4gaW50ZXJuYWxseSBzdG9yZWQgc2NvcGUgY2hhaW4sIHNvIHdlIGRvbid0IAotICog
bmVlZCB0byBzdXBwbHkgdGhlIGdsb2JhbCBzY29wZS4KLSAqLyAgICAgIAotCi1wdGhyZWFkX2tl
eV90IGdsb2JhbE9iamVjdEtleTsKLXB0aHJlYWRfb25jZV90IGdsb2JhbE9iamVjdEtleU9uY2Ug
PSBQVEhSRUFEX09OQ0VfSU5JVDsKLQotc3RhdGljIHZvaWQgdW5wcm90ZWN0R2xvYmFsT2JqZWN0
KHZvaWQqIGRhdGEpIAotewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjVW5wcm90ZWN0KHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZGF0YSkpOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFs
aXplR2xvYmFsT2JqZWN0S2V5KCkKLXsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmdsb2JhbE9i
amVjdEtleSwgdW5wcm90ZWN0R2xvYmFsT2JqZWN0KTsKLX0KLQotc3RhdGljIEV4ZWNTdGF0ZSog
Z2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCkKLXsKLSAgICBwdGhyZWFkX29uY2UoJmdsb2JhbE9i
amVjdEtleU9uY2UsIGluaXRpYWxpemVHbG9iYWxPYmplY3RLZXkpOwotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHB0aHJlYWRf
Z2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5KSk7Ci0gICAgaWYgKCFnbG9iYWxPYmplY3QpIHsK
LSAgICAgICAgZ2xvYmFsT2JqZWN0ID0gbmV3IEpTR2x1ZUdsb2JhbE9iamVjdDsKLSAgICAgICAg
Z2NQcm90ZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ2xv
YmFsT2JqZWN0S2V5LCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICAKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLQotICAgIC8vIERpc2NhcmQgZXhj
ZXB0aW9ucyAtLSBvdGhlcndpc2UgYW4gZXhjZXB0aW9uIHdvdWxkIGZvcmVzdGFsbCBKUyAKLSAg
ICAvLyBldmFsdWF0aW9uIHRocm91Z2hvdXQgdGhlIHRocmVhZAotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGV4ZWM7Ci19Ci0KIHZvaWQgSlNWYWx1ZVdyYXBwZXI6Okdl
dEpTT2JlY3RDYWxsQmFja3MoSlNPYmplY3RDYWxsQmFja3MmIGNhbGxCYWNrcykKIHsKICAgICBj
YWxsQmFja3MuZGlzcG9zZSA9IChKU09iamVjdERpc3Bvc2VQcm9jUHRyKUpTVmFsdWVXcmFwcGVy
OjpKU09iamVjdERpc3Bvc2U7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCShyZXZp
c2lvbiAzMjc1NykKKysrIEphdmFTY3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIGJvb2wgSlNSdW5DaGVja1N5bnRheChKU1J1blJl
ZiByZWYpCiB2b2lkIEpTQ29sbGVjdCh2b2lkKQogewogICAgIEpTTG9jayBsb2NrOwotICAgIENv
bGxlY3Rvcjo6Y29sbGVjdCgpOworICAgIGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5oZWFw
KCktPmNvbGxlY3QoKTsKIH0KIAogLyoKQEAgLTY0MSw3ICs2NDEsNiBAQCBDRk11dGFibGVBcnJh
eVJlZiBKU0NyZWF0ZUpTQXJyYXlGcm9tQ0ZBCiB2b2lkIEpTTG9ja0ludGVycHJldGVyKCkKIHsK
ICAgICBKU0xvY2s6OmxvY2soKTsKLSAgICBKU0xvY2s6OnJlZ2lzdGVyVGhyZWFkKCk7CiB9CiAK
IApJbmRleDogSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgSmF2
YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxNSAr
MTgzLDE1IEBAIEpTVmFsdWUgKlVzZXJPYmplY3RJbXA6OnRvUHJpbWl0aXZlKEV4ZWMKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGNmVHlwZSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBqc1N0cmluZyhDRlN0cmluZ1RvVVN0cmluZygoQ0ZTdHJpbmdSZWYpY2ZW
YWx1ZSkpOworICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgQ0ZTdHJpbmdUb1VT
dHJpbmcoKENGU3RyaW5nUmVmKWNmVmFsdWUpKTsKICAgICAgICAgfSBlbHNlIGlmIChjZlR5cGUg
PT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkgewogICAgICAgICAgICAgZG91YmxlIGQgPSAwLjA7CiAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKChDRk51bWJlclJlZiljZlZhbHVlLCBrQ0ZOdW1i
ZXJEb3VibGVUeXBlLCAmZCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBqc051bWJlcihkKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGQpOwogICAgICAgICB9IGVsc2UgaWYg
KGNmVHlwZSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBDRlVSTFJlZiBhYnNV
UkwgPSBDRlVSTENvcHlBYnNvbHV0ZVVSTCgoQ0ZVUkxSZWYpY2ZWYWx1ZSk7CiAgICAgICAgICAg
ICBpZiAoYWJzVVJMKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmcoQ0ZTdHJp
bmdUb1VTdHJpbmcoQ0ZVUkxHZXRTdHJpbmcoYWJzVVJMKSkpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGpzU3RyaW5nKGV4ZWMsIENGU3RyaW5nVG9VU3RyaW5nKENGVVJMR2V0U3RyaW5nKGFi
c1VSTCkpKTsKICAgICAgICAgICAgICAgICBSZWxlYXNlQ0ZUeXBlKGFic1VSTCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEyIEBACisyMDA4LTA1LTAxICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg4MjYKKyAgICAgICAgTWFrZSBKYXZhU2NyaXB0IGhlYXAgcGVyLXRocmVhZAorCisgICAg
ICAgIFRoaXMgaXMgbW9zdGx5IGFkYXB0YXRpb24gZm9yIEpTQyBjaGFuZ2VzLiBUaGUgbW9zdCBw
cm9taW5lbnQgb25lIGlzIHRoYXQgSlNPYmplY3QKKyAgICAgICAgYWxsb2NhdG9yIG5vdyB0YWtl
cyBFeGVjU3RhdGUsIGUuZy4gIm5ldyAoZXhlYykgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
KC4uLikiLiBJdCBpcworICAgICAgICBPSyB0byBwYXNzIGVpdGhlciB0aGUgY3VycmVudCBvciBn
bG9iYWwgb25lLCB3aGljaGV2ZXIgaXMgZmFzdGVyIHRvIGdldCBob2xkIG9mLCBhcyBib3RoCisg
ICAgICAgIGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlIHRvIGEgcGVyLXRocmVhZCBKUyBoZWFwLgor
CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0Nv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnY1RpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdyk6
CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmg6CisgICAgICAgIFJlbW92ZWQg
R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5n
KCksIGJlY2F1c2UgaGVhcHMgYXJlIG5vdworICAgICAgICBwZXItdGhyZWFkLCBhbmQgb25seSB0
aGUgb3duZXIgdGhyZWFkIGNhbiBhY2Nlc3MgYSBoZWFwLgorCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IFBhc3MgRXhlY1N0YXRlIHRvIGZ1bmN0aW9ucyB0
aGF0IG5vdyBuZWVkIGl0LgorICAgICAgICBKU0RPTVdpbmRvdywgSlNET01XaW5kb3dQcm90b3R5
cGUgYW5kIEpTRE9NV2luZG93V3JhcHBlciBhcmUgc3BlY2lhbCwgYmVjYXVzZSB0aGV5IGFyZQor
ICAgICAgICBjb25zdHJ1Y3RlZCBiZWZvcmUgYW55IEV4ZWNTdGF0ZSBjb21lcyBpbnRvIGV4aXN0
ZW5jZSwgc28gdGhleSB1c2UgSGVhcDo6dGhyZWFkSGVhcCgpCisgICAgICAgIGRpcmVjdGx5IGZv
ciBhbGxvY2F0aW9uLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dXcmFwcGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93V3JhcHBlcjo6b3BlcmF0b3IgbmV3
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1dyYXBwZXIuaDoKKyAgICAgICAg
QWRkZWQgYSBjdXN0b20gb3BlcmF0b3IgbmV3IHRvIHVzZSBwZXItdGhyZWFkIGhlYXAgd2hlbiB0
aGVyZSdzIG5vIEV4ZWNTdGF0ZSBhcm91bmQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb0NvbnN0cnVjdG9y
OjpKU0F1ZGlvQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlND
U1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NTU1ZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJk
Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Z2V0RGF0YSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmNo
ZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25l
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9ubm91
cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmRv
d25sb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0
T25wcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnNl
dE9udXBkYXRlcmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNhdGlvbkNhY2hl
OjpzZXRPbmNhY2hlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnNldExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3Jl
YXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93
UHJvdG9GdW5jQVRvQik6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dQcm90b0Z1bmNCVG9BKToK
KyAgICAgICAgKFdlYkNvcmU6OndpbmRvd1Byb3RvRnVuY1NldFRpbWVvdXQpOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93UHJvdG9GdW5jU2V0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
d2luZG93UHJvdG9GdW5jQWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzRXZl
bnRUYXJnZXRBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZTo6
c2VsZik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OnNldExpc3RlbmVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUpTSFRNTFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRN
TEZvcm1FbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZvcm1FbGVt
ZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1l
bnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudEJhc2U6Omdl
dFZhbHVlUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1l
bnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRpb25FbGVtZW50
Q29uc3RydWN0b3I6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0aCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNw
ZWN0b3JDYWxsYmFja1dyYXBwZXI6OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6dG9TdHJpbmcp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU05hdmlnYXRvcjo6YXBwVmVyc2lvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNO
b2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVG
aWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNSR0JDb2xvcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdF
bGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSlNTVkdX
cmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTGF6eUV2ZW50TGlzdGVuZXI6OmV2ZW50UGFyYW1l
dGVyTmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6OmNvbnN0cnVjdCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZXRPbnJlYWR5c3RhdGVjaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2V0T25sb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnNldE9ucHJvZ3Jlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNYU0xU
UHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25HZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPck51
bGwpOgorICAgICAgICAoV2ViQ29yZTo6anNPd25lZFN0cmluZ09yTnVsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1N0cmluZ09yVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5n
T3JGYWxzZSk6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU9iamVjdDo6RE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNhY2hlU1ZHRE9NT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9ranNfZXZlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVu
ZXI6OmV2ZW50UGFyYW1ldGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExp
c3RlbmVyOjpwYXJzZUNvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwOgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpkZWZh
dWx0VmFsdWUpOgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpzdHJpbmdWYWx1
ZSk6CisgICAgICAgIChLSlM6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om51bWJlclZhbHVlKToKKyAg
ICAgICAgKEtKUzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJp
ZGdlL2MvY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5jcHA6Cisg
ICAgICAgIChLSlM6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZSk6CisgICAgICAg
ICogYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpz
dHJpbmdWYWx1ZSk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6Om51bWJlclZhbHVlKToKKyAgICAg
ICAgKEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6
ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAg
ICogYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9q
c29iamVjdC5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAg
ICAoSmF2YUpTT2JqZWN0OjpjYWxsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6c2V0TWVtYmVy
KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmdldExp
c3RGcm9tSkFycmF5KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9vYmpjLm1tOgorICAgICAg
ICAoS0pTOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2puaV9ydW50aW1lLmNwcDoKKyAgICAgICAgKEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0Fy
cmF5KToKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZSk6Cisg
ICAgICAgIChKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEphdmFGaWVs
ZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUFycmF5Ojp2YWx1
ZUF0KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91dGlsaXR5Lmg6CisgICAgICAgICogYnJp
ZGdlL29iamMvb2JqY19jbGFzcy5tbToKKyAgICAgICAgKEtKUzo6QmluZGluZ3M6Ok9iamNDbGFz
czo6ZmFsbGJhY2tPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
aDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpzdHJpbmdW
YWx1ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6Om51bWJlclZhbHVlKToKKyAgICAgICAgKE9i
amNJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tOgorICAgICAgICAoS0pT
OjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpCaW5k
aW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
LmNwcDoKKyAgICAgICAgKEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZS5oOgorICAgICAgICAoS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNw
cDoKKyAgICAgICAgKFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0
dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoUnVu
dGltZU9iamVjdEltcDo6UnVudGltZU9iamVjdEltcCk6CisgICAgICAgIChSdW50aW1lT2JqZWN0
SW1wOjptZXRob2RHZXR0ZXIpOgorICAgICAgICAoUnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZh
bHVlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKyAgICAgICAgQWRhcHRlZCB0byBK
U0MgY2hhbmdlcy4gUGFzcyBFeGVjU3RhdGUgdG8gZnVuY3Rpb25zIHRoYXQgbm93IG5lZWQgaXQu
IFJlbW92ZWQKKyAgICAgICAgY29sbGVjdE9uTWFpblRocmVhZE9ubHksIGFzIHRoaXMgaXMgdGhl
IG9ubHkgd2F5IHRvIGNvbGxlY3Qgbm93LiBSZXBsYWNlZCBjYWxscyB0byBzdGF0aWMKKyAgICAg
ICAgQ29sbGVjdG9yIG1ldGhvZHMgd2l0aCBjYWxscyB0byBwZXItdGhyZWFkIEhlYXAgb25lcy4K
KwogMjAwOC0wNC0zMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzMjc1NykK
KysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIy
MCw2IEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVA3TlMKIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRF
CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjltb3VzZURvd25FUDdOU0V2ZW50CiBfX1pON1dl
YkNvcmUxMkdDQ29udHJvbGxlcjE3Z2FyYmFnZUNvbGxlY3ROb3dFdgotX19aTjdXZWJDb3JlMTJH
Q0NvbnRyb2xsZXI0M2dhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmdF
YgogX19aTjdXZWJDb3JlMTJJY29uRGF0YWJhc2UxMHNldEVuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTJJY29uRGF0YWJhc2UxMWRlZmF1bHRJY29uRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmUx
Mkljb25EYXRhYmFzZTE0aWNvbkZvclBhZ2VVUkxFUktOU182U3RyaW5nRVJLTlNfN0ludFNpemVF
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMjc1NykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMTcgKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0jaWYgVVNFKFBUSFJFQURTKQotCi1zdGF0aWMgdm9pZCogY29sbGVjdCh2b2lkKikK
LXsKLSAgICBKU0xvY2sgbG9jazsKLSAgICBDb2xsZWN0b3I6OmNvbGxlY3QoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotI2VuZGlmCi0KIEdDQ29udHJvbGxlciYgZ2NDb250cm9sbGVyKCkKIHsKICAg
ICBzdGF0aWMgR0NDb250cm9sbGVyIHN0YXRpY0dDQ29udHJvbGxlcjsKQEAgLTY4LDI2ICs1Nywx
MyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKCkKIHZvaWQgR0NDb250
cm9sbGVyOjpnY1RpbWVyRmlyZWQoVGltZXI8R0NDb250cm9sbGVyPiopCiB7CiAgICAgSlNMb2Nr
IGxvY2s7Ci0gICAgQ29sbGVjdG9yOjpjb2xsZWN0KCk7CisgICAgSGVhcDo6dGhyZWFkSGVhcCgp
LT5jb2xsZWN0KCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygp
CiB7CiAgICAgSlNMb2NrIGxvY2s7Ci0gICAgQ29sbGVjdG9yOjpjb2xsZWN0KCk7Ci19Ci0KLXZv
aWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdn
aW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKLXsKLSNpZiBVU0UoUFRIUkVBRFMpCi0gICAgcHRocmVh
ZF90IHRocmVhZDsKLSAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCBjb2xsZWN0LCBO
VUxMKTsKLQotICAgIGlmICh3YWl0VW50aWxEb25lKSB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BMb2NrczsgLy8gT3RoZXJ3aXNlIG91ciBsb2NrIHdvdWxkIGRlYWRsb2NrIHRo
ZSBjb2xsZWN0IHRocmVhZCB3ZSdyZSBqb2luaW5nCi0gICAgICAgIHB0aHJlYWRfam9pbih0aHJl
YWQsIE5VTEwpOwotICAgIH0KLSNlbmRpZgorICAgIEhlYXA6OnRocmVhZEhlYXAoKS0+Y29sbGVj
dCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvR0ND
b250cm9sbGVyLmgJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0Nv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAgICAgICAgIHZvaWQg
Z2FyYmFnZUNvbGxlY3ROb3coKTsgLy8gSXQncyBiZXR0ZXIgdG8gY2FsbCBnYXJiYWdlQ29sbGVj
dFNvb24sIHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIHJlYXNvbiBub3QgdG8uCiAKLSAgICAg
ICAgdm9pZCBnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wg
d2FpdFVudGlsRG9uZSk7IC8vIFVzZWQgZm9yIHN0cmVzcyB0ZXN0aW5nLgotCiAgICAgcHJpdmF0
ZToKICAgICAgICAgR0NDb250cm9sbGVyKCk7IC8vIFVzZSBnY0NvbnRyb2xsZXIoKSBpbnN0ZWFk
CiAgICAgICAgIHZvaWQgZ2NUaW1lckZpcmVkKFRpbWVyPEdDQ29udHJvbGxlcj4qKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDMy
NzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6SlNBdWRpb0Nv
bnN0cnVjdG9yKEUKICAgICA6IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm9iamVjdFByb3RvdHlwZSgpKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKLSAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRP
bmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250
RW51bSk7CiB9CiAKIGJvb2wgSlNBdWRpb0NvbnN0cnVjdG9yOjppbXBsZW1lbnRzQ29uc3RydWN0
KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwyNSArNTUsMjUgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3Rh
dGUqIGV4ZWMsIENTU1J1bGUqIAogCiAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NT
U3R5bGVSdWxlKEpTQ1NTUnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0NTU1N0
eWxlUnVsZShKU0NTU1J1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1N0
eWxlUnVsZSo+KHJ1bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1J1
bGU6Ok1FRElBX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDU1NNZWRpYVJ1bGUoSlND
U1NNZWRpYVJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU01lZGlhUnVs
ZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNDU1NNZWRpYVJ1bGUo
SlNDU1NNZWRpYVJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU01lZGlh
UnVsZSo+KHJ1bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1J1bGU6
OkZPTlRfRkFDRV9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTRm9udEZhY2VSdWxl
KEpTQ1NTRm9udEZhY2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NG
b250RmFjZVJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NT
Rm9udEZhY2VSdWxlKEpTQ1NTRm9udEZhY2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0
aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlND
U1NQYWdlUnVsZShKU0NTU1BhZ2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2Fz
dDxDU1NQYWdlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlND
U1NQYWdlUnVsZShKU0NTU1BhZ2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2Fz
dDxDU1NQYWdlUnVsZSo+KHJ1bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1J1bGU6OklNUE9SVF9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTSW1wb3J0
UnVsZShKU0NTU0ltcG9ydFJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENT
U0ltcG9ydFJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NT
SW1wb3J0UnVsZShKU0NTU0ltcG9ydFJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19j
YXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDU1ND
aGFyc2V0UnVsZShKU0NTU0NoYXJzZXRSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNf
Y2FzdDxDU1NDaGFyc2V0UnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhl
YykgSlNDU1NDaGFyc2V0UnVsZShKU0NTU0NoYXJzZXRSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZSo+KHJ1bGUpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTUnVsZShKU0NT
U1J1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHJ1bGUpOworICAgICAgICAgICAgcmV0ID0gbmV3
IChleGVjKSBKU0NTU1J1bGUoSlNDU1NSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBydWxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOCBAQCBKU1ZhbHVlKiBKU0NTU1N0eWxlRGVj
bGFyYXRpb246Om5hbWVHZXR0CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2ID0gdGhpc09iai0+aW1w
bCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3ApOwogICAgIGlmICh2KSB7CiAgICAgICAgIGlm
IChwaXhlbE9yUG9zICYmIHYtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlU
SVZFX1ZBTFVFKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19wb2ludGVyX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHYpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKHYtPmNzc1RleHQoKSk7
CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX3BvaW50ZXJfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odiktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywgdi0+Y3NzVGV4dCgp
KTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBzaG9ydGhhbmQgcHJvcGVy
dHkgKHN1Y2ggYXMgInBhZGRpbmciKSwgCkBAIC0xNDcsMTAgKzE0NywxMCBAQCBKU1ZhbHVlKiBK
U0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0CiAKICAgICAvLyBNYWtlIHRoZSBTVkcgJ2Zp
bHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0YWJsZSwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhl
IElFICdmaWx0ZXInIGF0dHJpYnV0ZS4KICAgICBpZiAocHJvcGVydHlOYW1lID09ICJmaWx0ZXIi
KQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwKKyAg
ICAgICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nSW5zdGFuY2VUaGF0TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlw
ZSgpLAogICAgICAgICAgICAgdGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Ap
KTsKIAotICAgIHJldHVybiBqc1N0cmluZyh0aGlzT2JqLT5pbXBsKCktPmdldFByb3BlcnR5VmFs
dWUocHJvcCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdl
dFByb3BlcnR5VmFsdWUocHJvcCkpOwogfQogCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNyArNTMsMTcg
QEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1ZhbHVlKgogICAgICAgICByZXR1
cm4gcmV0OwogCiAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXQgPSBu
ZXcgSlNDU1NWYWx1ZUxpc3QoSlNDU1NWYWx1ZUxpc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKSk7CisgICAgICAgIHJldCA9IG5ldyAoZXhl
YykgSlNDU1NWYWx1ZUxpc3QoSlNDU1NWYWx1ZUxpc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKSk7CiAjaWYgRU5BQkxFKFNWRykKICAgICBl
bHNlIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKQotICAgICAgICByZXQgPSBuZXcgSlNTVkdQYWlu
dChKU1NWR1BhaW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkdQYWludCo+
KHZhbHVlKSk7CisgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNTVkdQYWludChKU1NWR1BhaW50
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKSk7CiAg
ICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTU1ZH
Q29sb3IoSlNTVkdDb2xvclByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHQ29s
b3IqPih2YWx1ZSkpOworICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTU1ZHQ29sb3IoSlNTVkdD
b2xvclByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSkp
OwogI2VuZGlmCiAgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAg
ICAgcmV0ID0gbmV3IEpTQ1NTUHJpbWl0aXZlVmFsdWUoSlNDU1NQcmltaXRpdmVWYWx1ZVByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkp
OworICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTQ1NTUHJpbWl0aXZlVmFsdWUoSlNDU1NQcmlt
aXRpdmVWYWx1ZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IEpTQ1NTVmFsdWUo
SlNDU1NWYWx1ZVByb3RvdHlwZTo6c2VsZihleGVjKSwgdmFsdWUpOworICAgICAgICByZXQgPSBu
ZXcgKGV4ZWMpIEpTQ1NTVmFsdWUoSlNDU1NWYWx1ZVByb3RvdHlwZTo6c2VsZihleGVjKSwgdmFs
dWUpOwogCiAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh2YWx1ZSwgcmV0KTsK
ICAgICByZXR1cm4gcmV0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVs
QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52
YXNQaXhlbEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNQaXhlbEFycmF5OjppbmRleEdldHRlcgogICAg
IHVuc2lnbmVkIGNoYXIgcmVzdWx0OwogICAgIGlmICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHJl
c3VsdCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKIHZvaWQgSlND
YW52YXNQaXhlbEFycmF5OjppbmRleFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBKU1ZhbHVlKiB2YWx1ZSkKQEAgLTYyLDkgKzYyLDkgQEAgSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIENhbnZhc1BpeAogICAgIGlmIChyZXQpCiAgICAgICAgIHJldHVybiByZXQ7
CiAgICAgCi0gICAgcmV0ID0gbmV3IEpTQ2FudmFzUGl4ZWxBcnJheShKU0NhbnZhc1BpeGVsQXJy
YXlQcm90b3R5cGU6OnNlbGYoZXhlYyksIHBpeGVscyk7CisgICAgcmV0ID0gbmV3IChleGVjKSBK
U0NhbnZhc1BpeGVsQXJyYXkoSlNDYW52YXNQaXhlbEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBwaXhlbHMpOwogICAgIAotICAgIENvbGxlY3Rvcjo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHBp
eGVscy0+bGVuZ3RoKCkpOworICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHBpeGVscy0+bGVuZ3RoKCkpOwogICAgIAogICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01P
YmplY3QocGl4ZWxzLCByZXQpOwogICAgIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9u
IDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIEpTVmFs
dWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBz
dHlsZS0+Y2FudmFzR3JhZGllbnQoKSk7CiAgICAgaWYgKHN0eWxlLT5wYXR0ZXJuKCkpCiAgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5wYXR0ZXJuKCkpOwotICAgIHJldHVybiBqc1N0
cmluZyhzdHlsZS0+Y29sb3IoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0eWxlLT5j
b2xvcigpKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvSFRNTENhbnZh
c1N0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6dHlwZXMoRXhlY1N0YXRlKiBlCiAg
ICAgTGlzdCBsaXN0OwogICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
dHlwZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBsaXN0LmFwcGVuZChq
c1N0cmluZyhVU3RyaW5nKCppdCkpKTsKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhl
YywgVVN0cmluZygqaXQpKSk7CiAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CiB9CiAKQEAgLTkz
LDcgKzkzLDcgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OmdldERhdGEoRXhlY1N0YXRlKgogICAg
IGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1
cm4ganNTdHJpbmcocmVzdWx0KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsK
IH0KIAogSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBMaXN0JiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3
LDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogICAgIFJlZlB0
cjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4gc2VsZlByb3RlY3Rvcih0aGlzKTsKIAogICAgIExp
c3QgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhwcmVmaXgpKTsKKyAgICBhcmdzLmFw
cGVuZChqc1N0cmluZyhleGVjLCBwcmVmaXgpKTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAg
SlNWYWx1ZSogcmV0dmFsOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0
aW9uQ2FjaGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGRF
dmVudAogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSB0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgdHJ1ZSk7CisgICAgSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gdG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNy
ZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3NbMV0sIHRydWUpOwogICAg
IGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwo
KS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFy
Z3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUqIEpTRE9N
QXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXYKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gdG9KU0RPTVdpbmRvdyhm
cmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGFyZ3NbMV0sIHRy
dWUpOworICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHRvSlNET01X
aW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVj
LCBhcmdzWzFdLCB0cnVlKTsKICAgICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwpAQCAtMTAy
LDEwICsxMDIsMTAgQEAgSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpkaXNwYXRjaAog
ICAgIHJldHVybiBqc0Jvb2xlYW4ocmVzdWx0KTsgICAgCiB9CiAKLXZvaWQgSlNET01BcHBsaWNh
dGlvbkNhY2hlOjpzZXRPbmNoZWNraW5nKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbHVlKQordm9p
ZCBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2hlY2tpbmcoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgp
KQotICAgICAgICBpbXBsKCktPnNldE9uQ2hlY2tpbmdMaXN0ZW5lcih0b0pTRE9NV2luZG93KGZy
YW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUp
KTsKKyAgICAgICAgaW1wbCgpLT5zZXRPbkNoZWNraW5nTGlzdGVuZXIodG9KU0RPTVdpbmRvdyhm
cmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVl
LCB0cnVlKSk7CiB9CiAKIEpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6b25jaGVja2lu
ZyhFeGVjU3RhdGUqKSBjb25zdApAQCAtMTE2LDEwICsxMTYsMTAgQEAgSlNWYWx1ZSogSlNET01B
cHBsaWNhdGlvbkNhY2hlOjpvbmNoZWNraQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotdm9p
ZCBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uZXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSog
dmFsdWUpCit2b2lkIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25lcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsKCkt
PmZyYW1lKCkpCi0gICAgICAgIGltcGwoKS0+c2V0T25FcnJvckxpc3RlbmVyKHRvSlNET01XaW5k
b3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwg
dHJ1ZSkpOworICAgICAgICBpbXBsKCktPnNldE9uRXJyb3JMaXN0ZW5lcih0b0pTRE9NV2luZG93
KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFs
dWUsIHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpvbmVycm9y
KEV4ZWNTdGF0ZSopIGNvbnN0CkBAIC0xMzAsMTAgKzEzMCwxMCBAQCBKU1ZhbHVlKiBKU0RPTUFw
cGxpY2F0aW9uQ2FjaGU6Om9uZXJyb3IoCiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi12b2lk
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25ub3VwZGF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbm5vdXBkYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGlt
cGwoKS0+ZnJhbWUoKSkKLSAgICAgICAgaW1wbCgpLT5zZXRPbk5vVXBkYXRlTGlzdGVuZXIodG9K
U0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KHZhbHVlLCB0cnVlKSk7CisgICAgICAgIGltcGwoKS0+c2V0T25Ob1VwZGF0ZUxpc3RlbmVyKHRv
SlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cihleGVjLCB2YWx1ZSwgdHJ1ZSkpOwogfQogCiBKU1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2Fj
aGU6Om9ubm91cGRhdGUoRXhlY1N0YXRlKikgY29uc3QKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIEpT
VmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6b25ub3VwZGEKICAgICByZXR1cm4ganNOdWxs
KCk7CiB9CiAKLXZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmRvd25sb2FkaW5nKEV4
ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnNl
dE9uZG93bmxvYWRpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpKQotICAgICAgICBpbXBsKCktPnNldE9u
RG93bmxvYWRpbmdMaXN0ZW5lcih0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpKTsKKyAgICAgICAgaW1wbCgpLT5z
ZXRPbkRvd25sb2FkaW5nTGlzdGVuZXIodG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0
ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7CiB9CiAKIEpT
VmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6b25kb3dubG9hZGluZyhFeGVjU3RhdGUqKSBj
b25zdApAQCAtMTU4LDEwICsxNTgsMTAgQEAgSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hl
OjpvbmRvd25sbwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotdm9pZCBKU0RPTUFwcGxpY2F0
aW9uQ2FjaGU6OnNldE9ucHJvZ3Jlc3MoRXhlY1N0YXRlKiwgSlNWYWx1ZSogdmFsdWUpCit2b2lk
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25wcm9ncmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbHVlKQogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCkp
Ci0gICAgICAgIGltcGwoKS0+c2V0T25Qcm9ncmVzc0xpc3RlbmVyKHRvSlNET01XaW5kb3coZnJh
bWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSkp
OworICAgICAgICBpbXBsKCktPnNldE9uUHJvZ3Jlc3NMaXN0ZW5lcih0b0pTRE9NV2luZG93KGZy
YW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUs
IHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpvbnByb2dyZXNz
KEV4ZWNTdGF0ZSopIGNvbnN0CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBKU1ZhbHVlKiBKU0RPTUFw
cGxpY2F0aW9uQ2FjaGU6Om9ucHJvZ3JlCiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi12b2lk
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T251cGRhdGVyZWFkeShFeGVjU3RhdGUqLCBKU1Zh
bHVlKiB2YWx1ZSkKK3ZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbnVwZGF0ZXJlYWR5
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGltcGwoKS0+ZnJhbWUoKSkKLSAgICAgICAgaW1wbCgpLT5zZXRPblVwZGF0ZVJlYWR5TGlz
dGVuZXIodG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKHZhbHVlLCB0cnVlKSk7CisgICAgICAgIGltcGwoKS0+c2V0T25VcGRhdGVSZWFk
eUxpc3RlbmVyKHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOwogfQogCiBKU1ZhbHVlKiBKU0RPTUFw
cGxpY2F0aW9uQ2FjaGU6Om9udXBkYXRlcmVhZHkoRXhlY1N0YXRlKikgY29uc3QKQEAgLTE4Niwx
MCArMTg2LDEwIEBAIEpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6b251cGRhdGUKICAg
ICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLXZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRP
bmNhY2hlZChFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNET01BcHBsaWNhdGlv
bkNhY2hlOjpzZXRPbmNhY2hlZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQogewog
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCkpCi0gICAgICAgIGltcGwoKS0+
c2V0T25DYWNoZWRMaXN0ZW5lcih0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpKTsKKyAgICAgICAgaW1wbCgpLT5z
ZXRPbkNhY2hlZExpc3RlbmVyKHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOwogfQogCiBKU1ZhbHVl
KiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uY2FjaGVkKEV4ZWNTdGF0ZSopIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAzMjc1NykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDEwICsxOTksNiBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShK
U09iamVjCiAgICAgLCBtX2ltcGwod2luZG93KQogICAgICwgZChuZXcgSlNET01XaW5kb3dCYXNl
UHJpdmF0ZSh3cmFwcGVyKSkKIHsKLSAgICAvLyBKU0RPTVdpbmRvd0Jhc2UgZGVzdHJ1Y3Rpb24g
aXMgbm90IHRocmVhZC1zYWZlIGJlY2F1c2Ugb2YKLSAgICAvLyB0aGUgbm9uLXRocmVhZC1zYWZl
IFdlYkNvcmUgc3RydWN0dXJlcyBpdCByZWZlcmVuY2VzLgotICAgIENvbGxlY3Rvcjo6Y29sbGVj
dE9uTWFpblRocmVhZE9ubHkodGhpcyk7Ci0KICAgICAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBi
ZWZvcmUgdGhlIHNjcmlwdCB0aW1lb3V0IGhhbmRsZXIga2lja3MgaW4uCiAgICAgc2V0VGltZW91
dFRpbWUoMTAwMDApOwogfQpAQCAtNDMwLDIyICs0MjYsMjIgQEAgSlNWYWx1ZSAqSlNET01XaW5k
b3dCYXNlOjpnZXRWYWx1ZVByb3BlcgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgIC8vIEZJWE1FOiB0aGlzIHByb3BlcnR5IChhbmQgdGhlIGZldyBiZWxvdykgcHJvYmFibHkg
c2hvdWxkbid0IGNyZWF0ZSBhIG5ldyBvYmplY3QgZXZlcnkKICAgICAgIC8vIHRpbWUKLSAgICAg
IHJldHVybiBuZXcgSlNJbWFnZUNvbnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKSk7CisgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ltYWdlQ29uc3RydWN0b3IoZXhl
YywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKICAgICBjYXNlIE9wdGlvbjoKICAgICAg
IGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICByZXR1cm4gbmV3IEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvcihleGVj
LCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKSk7CiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDoKICAgICAgIGlmICghYWxsb3dzQWNj
ZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICByZXR1
cm4gbmV3IEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvcihleGVjLCBpbXBsKCktPmZyYW1lKCkt
PmRvY3VtZW50KCkpOworICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAgICAgY2FzZSBB
dWRpbzoKICNpZiBFTkFCTEUoVklERU8pCiAgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgaWYgKCFNZWRpYVBsYXll
cjo6aXNBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICBy
ZXR1cm4gbmV3IEpTQXVkaW9Db25zdHJ1Y3RvcihleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3Vt
ZW50KCkpOworICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBdWRpb0NvbnN0cnVjdG9yKGV4ZWMs
IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAjZWxzZQogICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAjZW5kaWYKQEAgLTQ1Myw3ICs0NDksNyBAQCBKU1ZhbHVlICpKU0RPTVdpbmRv
d0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICBpZiAoIWFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
cmV0dXJuIG5ldyBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvcihleGVjKTsKKyAgICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yKGV4ZWMpOwogI2Vsc2UKICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogI2VuZGlmCkBAIC04ODEsNyArODc3LDcgQEAgdm9p
ZCBKU0RPTVdpbmRvd0Jhc2U6OnNldExpc3RlbmVyKEV4ZWNTdAogICAgIGlmICghZG9jKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkb2MtPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50
VHlwZSwgZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGZ1bmMsIHRydWUpKTsKKyAgICBkb2Mt
PnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZmluZE9yQ3JlYXRlSlNFdmVu
dExpc3RlbmVyKGV4ZWMsIGZ1bmMsIHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNET01XaW5kb3dC
YXNlOjpnZXRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKSBjb25zdApAQCAtOTA2LDcgKzkwMiw3IEBAIEpTRXZlbnRMaXN0ZW5lciogSlNET01X
aW5kb3dCYXNlOjpmaW5kSlMKICAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmplY3QpOwogfQog
Ci1KU0V2ZW50TGlzdGVuZXIqIEpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNFdmVudExp
c3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBodG1sKQorSlNFdmVudExpc3RlbmVyKiBKU0RPTVdp
bmRvd0Jhc2U6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbCwgYm9vbCBodG1sKQogewogICAgIEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBmaW5kSlNFdmVudExpc3RlbmVyKHZhbCwgaHRtbCk7CiAgICAgaWYgKGxpc3RlbmVyKQpAQCAt
OTIwLDcgKzkxNiw3IEBAIEpTRXZlbnRMaXN0ZW5lciogSlNET01XaW5kb3dCYXNlOjpmaW5kT3IK
ICAgICByZXR1cm4gbmV3IEpTRXZlbnRMaXN0ZW5lcihvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9N
V2luZG93Kj4odGhpcyksIGh0bWwpOwogfQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciog
SlNET01XaW5kb3dCYXNlOjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSog
dmFsLCBib29sIGh0bWwpCitKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogSlNET01XaW5kb3dC
YXNlOjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2YWwsIGJvb2wgaHRtbCkKIHsKICAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC05MjksOSArOTI1LDkgQEAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIEpTRE9NV2luZG93QgogICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KG9iamVjdCk7CiB9CiAK
LUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTVdpbmRvd0Jhc2U6OmZpbmRPckNyZWF0
ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBodG1sKQorSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJv
b2wgaHRtbCkKIHsKLSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBm
aW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsLCBodG1sKTsKKyAgICBKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoZXhlYywgdmFsLCBodG1sKTsKICAgICBpZiAobGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBs
aXN0ZW5lcjsKICAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKQEAgLTk5Miw3ICs5ODgsNyBAQCBK
U1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNBVG9CKEV4ZWNTdGF0ZSogCiAKICAgICBKU1ZhbHVlKiB2
ID0gYXJnc1swXTsKICAgICBpZiAodi0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmlu
ZygpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYyk7CiAKICAgICBVU3RyaW5nIHMgPSB2
LT50b1N0cmluZyhleGVjKTsKICAgICBpZiAoIXMuaXM4Qml0KCkpIHsKQEAgLTEwMDgsNyArMTAw
NCw3IEBAIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0FUb0IoRXhlY1N0YXRlKiAKICAgICBpZiAo
IWJhc2U2NERlY29kZShpbiwgb3V0KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
R2VuZXJhbEVycm9yLCAiQ2Fubm90IGRlY29kZSBiYXNlNjQiKTsKIAotICAgIHJldHVybiBqc1N0
cmluZyhTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkpOworICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkpOwogfQogCiBKU1ZhbHVlKiB3
aW5kb3dQcm90b0Z1bmNCVG9BKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC0xMDI1LDcgKzEwMjEsNyBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90
b0Z1bmNCVG9BKEV4ZWNTdGF0ZSogCiAKICAgICBKU1ZhbHVlKiB2ID0gYXJnc1swXTsKICAgICBp
ZiAodi0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygpOworICAgICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYyk7CiAKICAgICBVU3RyaW5nIHMgPSB2LT50b1N0cmluZyhleGVjKTsK
ICAgICBpZiAoIXMuaXM4Qml0KCkpIHsKQEAgLTEwNDAsNyArMTAzNiw3IEBAIEpTVmFsdWUqIHdp
bmRvd1Byb3RvRnVuY0JUb0EoRXhlY1N0YXRlKiAKIAogICAgIGJhc2U2NEVuY29kZShpbiwgb3V0
KTsKIAotICAgIHJldHVybiBqc1N0cmluZyhTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUo
KSkpOwogfQogCiBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC0xMTI1LDExICsxMTIxLDEx
IEBAIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1NldFRpbWVvdXQoRXhlY1MKIAogICAgIEpTVmFs
dWUqIHYgPSBhcmdzWzBdOwogICAgIGlmICh2LT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4g
anNOdW1iZXIod2luZG93LT5pbnN0YWxsVGltZW91dCh2LT50b1N0cmluZyhleGVjKSwgYXJnc1sx
XS0+dG9JbnQzMihleGVjKSwgdHJ1ZSAvKnNpbmdsZSBzaG90Ki8pKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodi0+dG9TdHJpbmcoZXhlYyks
IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIHRydWUgLypzaW5nbGUgc2hvdCovKSk7CiAgICAgaWYg
KHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVtZW50c0Nh
bGwoKSkgewogICAgICAgICBMaXN0IGFyZ3NUYWlsOwogICAgICAgICBhcmdzLmdldFNsaWNlKDIs
IGFyZ3NUYWlsKTsKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHdpbmRvdy0+aW5zdGFsbFRpbWVv
dXQodiwgYXJnc1RhaWwsIGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIHRydWUgLypzaW5nbGUgc2hv
dCovKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1l
b3V0KHYsIGFyZ3NUYWlsLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpLCB0cnVlIC8qc2luZ2xlIHNo
b3QqLykpOwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTE2MiwxMSAr
MTE1OCwxMSBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNTZXRJbnRlcnZhbChFeGVjCiAgICAg
ICAgIEpTVmFsdWUqIHYgPSBhcmdzWzBdOwogICAgICAgICBpbnQgZGVsYXkgPSBhcmdzWzFdLT50
b0ludDMyKGV4ZWMpOwogICAgICAgICBpZiAodi0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcih3aW5kb3ctPmluc3RhbGxUaW1lb3V0KHYtPnRvU3RyaW5nKGV4ZWMpLCBk
ZWxheSwgZmFsc2UpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ct
Pmluc3RhbGxUaW1lb3V0KHYtPnRvU3RyaW5nKGV4ZWMpLCBkZWxheSwgZmFsc2UpKTsKICAgICAg
ICAgaWYgKHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVt
ZW50c0NhbGwoKSkgewogICAgICAgICAgICAgTGlzdCBhcmdzVGFpbDsKICAgICAgICAgICAgIGFy
Z3MuZ2V0U2xpY2UoMiwgYXJnc1RhaWwpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHdp
bmRvdy0+aW5zdGFsbFRpbWVvdXQodiwgYXJnc1RhaWwsIGRlbGF5LCBmYWxzZSkpOworICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodiwgYXJn
c1RhaWwsIGRlbGF5LCBmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTg3LDcgKzEx
ODMsNyBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNBZGRFdmVudExpc3RlbmVyCiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpZiAoSlNFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHdpbmRvdy0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVy
KGFyZ3NbMV0pKSB7CisgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSB3aW5kb3ct
PmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzWzFdKSkgewogICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgZG9jLT5h
ZGRXaW5kb3dFdmVudExpc3RlbmVyKEF0b21pY1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVj
KSksIGxpc3RlbmVyLCBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNywxMCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTc0LDEzICs3OCwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTRXZlbnRMaXN0ZW5lciogZmluZEpT
RXZlbnRMaXN0ZW5lcihLSlM6OkpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CiAKICAgICAg
ICAgLy8gRmluZHMgb3IgY3JlYXRlcyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBK
UyBFdmVudExpc3RlbmVyIG9iamVjdCBpcyBHQy1wcm90ZWN0ZWQuCi0gICAgICAgIEpTRXZlbnRM
aXN0ZW5lciogZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEtKUzo6SlNWYWx1ZSosIGJvb2wg
aHRtbCA9IGZhbHNlKTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKiBmaW5kT3JDcmVhdGVKU0V2
ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTVmFsdWUqLCBib29sIGh0bWwgPSBm
YWxzZSk7CiAKICAgICAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgR0MtdW5wcm90ZWN0ZWQg
SlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICAgICAg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cihLSlM6OkpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAgICAgIEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CiAKICAgICAgICAgLy8g
RmluZHMgb3IgY3JlYXRlcyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBKUyBFdmVu
dExpc3RlbmVyIG9iamVjdCBpcyAqTk9UKiBHQy1wcm90ZWN0ZWQuCi0gICAgICAgIEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cihLSlM6OkpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAgICAgIEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKiBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihL
SlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKIAogICAg
ICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93V3JhcHBlci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd1dyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDExIEBA
IHZvaWQgSlNET01XaW5kb3dXcmFwcGVyOjpjbGVhcigpCiAgICAgbV93aW5kb3ctPmNsZWFyKCk7
CiB9CiAKK3ZvaWQqIEpTRE9NV2luZG93V3JhcHBlcjo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXpl
KQoreworICAgIHJldHVybiBIZWFwOjp0aHJlYWRIZWFwKCktPmFsbG9jYXRlKHNpemUpOworfQor
CiAvLyAtLS0tCiAvLyBDb252ZXJzaW9uIG1ldGhvZHMKIC8vIC0tLS0KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1dyYXBwZXIuaAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0
RnJhbWUoKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCisgICAgICAgIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3QpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNET01XaW5kb3cqIG1fd2lu
ZG93OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTMgKzgyLDEzIEBAIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCoKICAgICAgICAgcmV0dXJuIHJldDsKIAogICAgIGlm
IChkb2MtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU0hUTUxEb2N1bWVu
dChKU0hUTUxEb2N1bWVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4oZG9jKSk7CisgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNIVE1MRG9jdW1lbnQo
SlNIVE1MRG9jdW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCo+KGRvYykpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAoZG9jLT5pc1NWR0Rv
Y3VtZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1NWR0RvY3VtZW50KEpTU1ZHRG9jdW1lbnRQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oZG9jKSk7Cisg
ICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNTVkdEb2N1bWVudChKU1NWR0RvY3VtZW50UHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGRvYykpOwogI2VuZGlm
CiAgICAgZWxzZQotICAgICAgICByZXQgPSBuZXcgSlNEb2N1bWVudChKU0RvY3VtZW50UHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBkb2MpOworICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRG9jdW1l
bnQoSlNEb2N1bWVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgZG9jKTsKIAogICAgIC8vIE1ha2Ug
c3VyZSB0aGUgZG9jdW1lbnQgaXMga2VwdCBhcm91bmQgYnkgdGhlIHdpbmRvdyBvYmplY3QsIGFu
ZCB3b3JrcyByaWdodCB3aXRoIHRoZQogICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZS4KQEAgLTk5
LDcgKzk5LDcgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KgogICAg
ICAgICBmb3IgKE5vZGUqIG4gPSBkb2M7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCiAg
ICAgICAgICAgICBub2RlQ291bnQrKzsKICAgICAgICAgCi0gICAgICAgIENvbGxlY3Rvcjo6cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KG5vZGVDb3VudCAqIHNpemVvZihOb2RlKSk7CisgICAgICAgIGV4
ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG5vZGVDb3VudCAqIHNpemVvZihOb2Rl
KSk7CiAgICAgfQogCiAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChkb2MsIHJl
dCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDMy
NzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODksMzkgKzg5LDM5IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBF
dmVudCogZXYKIAogICAgIGlmIChldmVudC0+aXNVSUV2ZW50KCkpIHsKICAgICAgICAgaWYgKGV2
ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0tleWJvYXJk
RXZlbnQoSlNLZXlib2FyZEV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNL
ZXlib2FyZEV2ZW50KEpTS2V5Ym9hcmRFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGlj
X2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5p
c1RleHRFdmVudCgpKQotICAgICAgICAgICAgcmV0ID0gbmV3IEpTVGV4dEV2ZW50KEpTVGV4dEV2
ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkp
OworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1RleHRFdmVudChKU1RleHRFdmVudFBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKICAg
ICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgcmV0ID0g
bmV3IEpTTW91c2VFdmVudChKU01vdXNlRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVj
KSBKU01vdXNlRXZlbnQoSlNNb3VzZUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hl
ZWxFdmVudCgpKQotICAgICAgICAgICAgcmV0ID0gbmV3IEpTV2hlZWxFdmVudChKU1doZWVsRXZl
bnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkp
OworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1doZWVsRXZlbnQoSlNXaGVlbEV2ZW50
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpKTsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBlbHNlIGlmIChldmVudC0+aXNTVkdab29tRXZlbnQo
KSkKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU1NWR1pvb21FdmVudChKU1NWR1pvb21FdmVudFBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHWm9vbUV2ZW50Kj4oZXZlbnQpLCAw
KTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNTVkdab29tRXZlbnQoSlNTVkdab29t
RXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFNWR1pvb21FdmVudCo+KGV2
ZW50KSwgMCk7CiAjZW5kaWYKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0ID0gbmV3IEpT
VUlFdmVudChKU1VJRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFVJRXZl
bnQqPihldmVudCkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1VJRXZlbnQoSlNV
SUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQp
KTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKLSAgICAgICAgcmV0
ID0gbmV3IEpTTXV0YXRpb25FdmVudChKU011dGF0aW9uRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnQqPihldmVudCkpOworICAgICAgICByZXQgPSBu
ZXcgKGV4ZWMpIEpTTXV0YXRpb25FdmVudChKU011dGF0aW9uRXZlbnRQcm90b3R5cGU6OnNlbGYo
ZXhlYyksIHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYg
KGV2ZW50LT5pc092ZXJmbG93RXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTT3ZlcmZsb3dF
dmVudChKU092ZXJmbG93RXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PE92
ZXJmbG93RXZlbnQqPihldmVudCkpOworICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTT3ZlcmZs
b3dFdmVudChKU092ZXJmbG93RXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0
PE92ZXJmbG93RXZlbnQqPihldmVudCkpOwogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNT
QUdJTkcpCiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzTWVzc2FnZUV2ZW50KCkpCi0gICAgICAgIHJl
dCA9IG5ldyBKU01lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudFByb3RvdHlwZTo6c2VsZihleGVj
KSwgc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgcmV0ID0gbmV3
IChleGVjKSBKU01lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudFByb3RvdHlwZTo6c2VsZihleGVj
KSwgc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKTsKICNlbmRpZgogICAgIGVsc2Ug
aWYgKGV2ZW50LT5pc1Byb2dyZXNzRXZlbnQoKSkgewogICAgICAgICBpZiAoZXZlbnQtPmlzWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkpCi0gICAgICAgICAgICByZXQgPSBuZXcgSlNYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRQcm90
b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dCo+KGV2ZW50KSk7CisgICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50KEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQqPihldmVu
dCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXQgPSBuZXcgSlNQcm9ncmVzc0V2ZW50
KEpTUHJvZ3Jlc3NFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8UHJvZ3Jl
c3NFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTUHJvZ3Jl
c3NFdmVudChKU1Byb2dyZXNzRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0
PFByb2dyZXNzRXZlbnQqPihldmVudCkpOwogICAgIH0KICNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzU3RvcmFnZUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5l
dyBKU1N0b3JhZ2VFdmVudChKU1N0b3JhZ2VFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3Rh
dGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgcmV0ID0gbmV3IChleGVj
KSBKU1N0b3JhZ2VFdmVudChKU1N0b3JhZ2VFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3Rh
dGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKICNlbmRpZgogICAgIGVsc2UKLSAgICAg
ICAgcmV0ID0gbmV3IEpTRXZlbnQoSlNFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgZXZlbnQp
OworICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTRXZlbnQoSlNFdmVudFByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgZXZlbnQpOwogCiAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChl
dmVudCwgcmV0KTsKICAgICByZXR1cm4gcmV0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYs
NyBAQCBKU1ZhbHVlKiBqc0V2ZW50VGFyZ2V0QWRkRXZlbnRMaXN0ZW5lcihFCiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpZiAoSlNFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU0V2
ZW50TGlzdGVuZXIoYXJnc1sxXSkpCisgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSB0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGV4ZWMs
IGFyZ3NbMV0pKQogICAgICAgICBldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBd
LT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CiAK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxLSlM6
OkpTT2JqZWN0Kj4ob2JqZWN0VmFsdWUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBL
SlM6OkpTT2JqZWN0KiBuZXdPYmplY3QgPSBuZXcgSlNFdmVudFRhcmdldFByb3RvdHlwZTxKU0V2
ZW50VGFyZ2V0UHJvdG90eXBlUGFyZW50LCBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRp
b24+KGV4ZWMpOworICAgICAgICAgICAgS0pTOjpKU09iamVjdCogbmV3T2JqZWN0ID0gbmV3IChl
eGVjKSBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTRXZlbnRUYXJnZXRQcm90b3R5cGVQYXJlbnQs
IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbj4oZXhlYyk7CiAgICAgICAgICAgICBn
bG9iYWxPYmplY3QtPnB1dERpcmVjdCgqcHJvdG90eXBlTmFtZSwgbmV3T2JqZWN0LCBLSlM6OkRv
bnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgICAgIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAzMjc1
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgSlNFdmVudFRhcmdldE5vZGU6OnNldExpc3Rl
bmVyKEV4ZWMKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmRvY3VtZW50KCktPmZyYW1l
KCk7CiAgICAgaWYgKGZyYW1lKQotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGltcGwoKSkt
PnNldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgdG9KU0RPTVdpbmRvdyhmcmFtZSktPmZp
bmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihmdW5jLCB0cnVlKSk7CisgICAgICAgIEV2ZW50VGFy
Z2V0Tm9kZUNhc3QoaW1wbCgpKS0+c2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCB0b0pT
RE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGV4ZWMsIGZ1bmMs
IHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGU6OmdldExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzMjc1NykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIEpTVmFsdWUqIGdldE5hbWVkSXRlbXMoRXhl
Y1N0YXRlKgogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBuYW1lZEl0ZW1zWzBdLmdldCgpKTsKIAotICAgIHJldHVybiBuZXcgSlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpLCBuYW1lZEl0ZW1zKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU05hbWVkTm9kZXND
b2xsZWN0aW9uKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCks
IG5hbWVkSXRlbXMpOwogfQogCiAvLyBIVE1MQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0
cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLApAQCAtMTM0LDEzICsxMzQsMTMgQEAg
SlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xsZQogCiAgICAgc3dpdGNoIChj
b2xsZWN0aW9uLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBIVE1MQ29sbGVjdGlvbjo6U2VsZWN0
T3B0aW9uczoKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbihK
U0hUTUxPcHRpb25zQ29sbGVjdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAgcmV0ID0g
bmV3IChleGVjKSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbihKU0hUTUxPcHRpb25zQ29sbGVjdGlv
blByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9u
Kj4oY29sbGVjdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRNTENv
bGxlY3Rpb246OkRvY0FsbDoKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0hUTUxBbGxDb2xsZWN0
aW9uKEpTSFRNTENvbGxlY3Rpb25Qcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEhU
TUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVj
KSBKU0hUTUxBbGxDb2xsZWN0aW9uKEpTSFRNTENvbGxlY3Rpb25Qcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNIVE1M
Q29sbGVjdGlvbihKU0hUTUxDb2xsZWN0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNf
Y2FzdDxIVE1MQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIHJldCA9IG5l
dyAoZXhlYykgSlNIVE1MQ29sbGVjdGlvbihKU0hUTUxDb2xsZWN0aW9uUHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxF
bGVtZW50V3JhcHBlckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNCwxNCArMjI0LDE0IEBAIHR5cGVkZWYgSlNOb2RlKiAoKkNyZWF0ZUhU
TUxFbGVtZW50V3JhcHAKICNkZWZpbmUgQ1JFQVRFX1dSQVBQRVJfRlVOQ1RJT04odGFnLCBuYW1l
KSBcCiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUjI25hbWUjI1dyYXBwZXIoRXhlY1N0YXRlKiBleGVj
LCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KSBcCiB7IFwKLSAgICByZXR1cm4gbmV3
IEpTSFRNTCMjbmFtZSMjRWxlbWVudChKU0hUTUwjI25hbWUjI0VsZW1lbnRQcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PEhUTUwjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgp
KSk7IFwKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU0hUTUwjI25hbWUjI0VsZW1lbnQoSlNIVE1M
IyNuYW1lIyNFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxIVE1MIyNu
YW1lIyNFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOyBcCiB9CiAjZGVmaW5lIENSRUFURV9NRURJ
QV9XUkFQUEVSX0ZVTkNUSU9OKHRhZywgbmFtZSkgXAogc3RhdGljIEpTTm9kZSogY3JlYXRlIyNu
YW1lIyNXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxl
bWVudCkgXAogeyBcCiAgICAgaWYgKCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkgXAotICAg
ICAgICByZXR1cm4gbmV3IEpTSFRNTEVsZW1lbnQoSlNIVE1MRWxlbWVudFByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgZWxlbWVudC5nZXQoKSk7IFwKLSAgICByZXR1cm4gbmV3IEpTSFRNTCMjbmFtZSMj
RWxlbWVudChKU0hUTUwjI25hbWUjI0VsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PEhUTUwjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwKKyAgICAgICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNIVE1MRWxlbWVudChKU0hUTUxFbGVtZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBlbGVtZW50LmdldCgpKTsgXAorICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTSFRN
TCMjbmFtZSMjRWxlbWVudChKU0hUTUwjI25hbWUjI0VsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PEhUTUwjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwK
IH0KIEZPUl9FQUNIX1RBRyhDUkVBVEVfV1JBUFBFUl9GVU5DVElPTikKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0yNjcsNyArMjY3LDcgQEAgRk9SX0VBQ0hfTUVESUFfVEFHKEFERF9UT19IQVNIX01B
UCkKICAgICBDcmVhdGVIVE1MRWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVu
Y3Rpb24gPSBtYXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGNy
ZWF0ZVdyYXBwZXJGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlv
bihleGVjLCBlbGVtZW50KTsKLSAgICByZXR1cm4gbmV3IEpTSFRNTEVsZW1lbnQoSlNIVE1MRWxl
bWVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgZWxlbWVudC5nZXQoKSk7CisgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNIVE1MRWxlbWVudChKU0hUTUxFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBlbGVtZW50LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgSlNWYWx1ZSogSlNIVE1MRm9y
bUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRQogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQog
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBuYW1lZEl0ZW1zWzBdLmdldCgpKTsKICAgICBpZiAo
bmFtZWRJdGVtcy5zaXplKCkgPiAxKSAKLSAgICAgICAgcmV0dXJuIG5ldyBKU05hbWVkTm9kZXND
b2xsZWN0aW9uKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCks
IG5hbWVkSXRlbXMpOworICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCksIG5h
bWVkSXRlbXMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDMy
NzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsOSArODIsOSBAQCBKU1ZhbHVlKiBKU0hUTUxJbnB1dEVsZW1l
bnRCYXNlOjpnZXRWYWx1CiAgICAgQVNTRVJUKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSk7CiAg
ICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgU2VsZWN0aW9uU3RhcnQ6Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIGlucHV0LnNlbGVjdGlvblN0YXJ0KCkpOwogICAgIGNhc2UgU2VsZWN0aW9u
RW5kOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5wdXQuc2VsZWN0aW9uRW5kKCkpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5wdXQuc2VsZWN0aW9uRW5kKCkpOwogICAgIH0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6SlNIVE1MT3AKICAgICA6
IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoNCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9u
dEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051
bWJlcihleGVjLCA0KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKIGJvb2wg
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29u
c3QKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVmFsdWUqIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEhUTUxPcHRp
b25zQ29sbGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4o
aW1wbCgpKTsKLSAgICByZXR1cm4ganNOdW1iZXIoaW1wLT5sZW5ndGgoKSk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGltcC0+bGVuZ3RoKCkpOwogfQogCiB2b2lkIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9i
amVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIEpTVmFsdWUq
IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcCgKICAgICBKU1ZhbHVlKiBwcm90b3R5cGUg
PSB1bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOwogICAgIEpTVmFsdWUqIHdyYXBwZWRQcm90
b3R5cGUgPSBwcm90b3R5cGUgPyB3cmFwKHVud3JhcHBlZEV4ZWMsIHByb3RvdHlwZSkgOiAwOwog
Ci0gICAgcmV0dXJuIG5ldyBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIodW53cmFwcGVkRXhlYywg
dW53cmFwcGVkT2JqZWN0LCB3cmFwcGVkUHJvdG90eXBlKTsKKyAgICByZXR1cm4gbmV3ICh1bndy
YXBwZWRFeGVjKSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFw
cGVkT2JqZWN0LCB3cmFwcGVkUHJvdG90eXBlKTsKIH0KIAogSlNJbnNwZWN0ZWRPYmplY3RXcmFw
cGVyOjpKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIoRXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBK
U09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBKU1ZhbHVlKiB3cmFwcGVkUHJvdG90eXBlKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
ci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckNhbGxiYWNrV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNW
YWx1ZSogSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OndyYQogICAgIEpTVmFsdWUqIHByb3Rv
dHlwZSA9IHVud3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgSlNWYWx1ZSogd3JhcHBl
ZFByb3RvdHlwZSA9IHByb3RvdHlwZSA/IHdyYXAodW53cmFwcGVkRXhlYywgcHJvdG90eXBlKSA6
IDA7CiAKLSAgICByZXR1cm4gbmV3IEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKHVud3JhcHBl
ZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgd3JhcHBlZFByb3RvdHlwZSk7CisgICAgcmV0dXJuIG5l
dyAodW53cmFwcGVkRXhlYykgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIodW53cmFwcGVkRXhl
YywgdW53cmFwcGVkT2JqZWN0LCB3cmFwcGVkUHJvdG90eXBlKTsKIH0KIAogSlNJbnNwZWN0b3JD
YWxsYmFja1dyYXBwZXI6OkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKEV4ZWNTdGF0ZSogdW53
cmFwcGVkRXhlYywgSlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgSlNWYWx1ZSogd3JhcHBlZFBy
b3RvdHlwZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlv
bjo6dG9TdHJpbmcoRXhlY1N0YXRlKgogICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4
ZWMsIGZyYW1lKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4g
anNTdHJpbmcoaW1wbCgpLT50b1N0cmluZygpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
aW1wbCgpLT50b1N0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6SlNOYW1lZE5vZGVzQ29sbAogSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6
bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBKU05hbWVkTm9kZXNDb2xsZWN0aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNO
YW1lZE5vZGVzQ29sbGVjdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJuIGpzTnVt
YmVyKHRoaXNPYmotPm1fbm9kZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
dGhpc09iai0+bV9ub2Rlcy5zaXplKCkpOwogfQogCiBKU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAko
cmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsMTEgQEAgSlNWYWx1ZSogSlNOYXZp
Z2F0b3I6OmFwcFZlcnNpb24oRXhlY1N0YQogICAgIE5hdmlnYXRvciogaW1wID0gc3RhdGljX2Nh
c3Q8TmF2aWdhdG9yKj4oaW1wbCgpKTsKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKyAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsICIiKTsKIAogICAgIGlmIChuZWVkc1lvdVR1YmVRdWlyayhl
eGVjLCBmcmFtZSkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygiIik7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKGltcC0+YXBwVmVyc2lvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
ICIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wLT5hcHBWZXJzaW9uKCkpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAzMjc1
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDQzICsxODAsNDMgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5v
ZGUqIG5vZAogICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihleGVjLCBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSkpOwogI2VuZGlmCiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmV0ID0gbmV3IEpTRWxlbWVudChKU0VsZW1lbnRQcm90b3R5cGU6
OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU0VsZW1lbnQoSlNFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcg
SlNBdHRyKEpTQXR0clByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8QXR0cio+KG5v
ZGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNBdHRyKEpTQXR0clByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICAgICAgICAgIHJldCA9IG5l
dyBKU1RleHQoSlNUZXh0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxUZXh0Kj4o
bm9kZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU1RleHQoSlNUZXh0UHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICAg
ICAgcmV0ID0gbmV3IEpTQ0RBVEFTZWN0aW9uKEpTQ0RBVEFTZWN0aW9uUHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICBy
ZXQgPSBuZXcgKGV4ZWMpIEpTQ0RBVEFTZWN0aW9uKEpTQ0RBVEFTZWN0aW9uUHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihub2RlKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKLSAgICAgICAgICAgIHJl
dCA9IG5ldyBKU0VudGl0eShKU0VudGl0eVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nh
c3Q8RW50aXR5Kj4obm9kZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0VudGl0
eShKU0VudGl0eVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RW50aXR5Kj4obm9k
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0
aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICByZXQg
PSBuZXcgKGV4ZWMpIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uKEpTUHJvY2Vzc2luZ0luc3RydWN0
aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24qPihub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpDT01N
RU5UX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDb21tZW50KEpTQ29tbWVudFByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKTsKKyAgICAgICAg
ICAgIHJldCA9IG5ldyAoZXhlYykgSlNDb21tZW50KEpTQ29tbWVudFByb3RvdHlwZTo6c2VsZihl
eGVjKSwgc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CiAgICAgICAgICAgICAvLyB3ZSBkb24n
dCB3YW50IHRvIGNhY2hlIHRoZSBkb2N1bWVudCBpdHNlbGYgaW4gdGhlIHBlci1kb2N1bWVudCBk
aWN0aW9uYXJ5CiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KG5vZGUpKTsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgSlNEb2N1bWVudFR5cGUoSlNEb2N1bWVudFR5cGVQcm90b3R5
cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KG5vZGUpKTsKKyAgICAg
ICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNEb2N1bWVudFR5cGUoSlNEb2N1bWVudFR5cGVQcm90
b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KG5vZGUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6Ci0gICAg
ICAgICAgICByZXQgPSBuZXcgSlNOb3RhdGlvbihKU05vdGF0aW9uUHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5l
dyAoZXhlYykgSlNOb3RhdGlvbihKU05vdGF0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0
aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcg
SlNEb2N1bWVudEZyYWdtZW50KEpTRG9jdW1lbnRGcmFnbWVudFByb3RvdHlwZTo6c2VsZihleGVj
KSwgc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgIHJl
dCA9IG5ldyAoZXhlYykgSlNEb2N1bWVudEZyYWdtZW50KEpTRG9jdW1lbnRGcmFnbWVudFByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KG5vZGUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9SRUZFUkVOQ0Vf
Tk9ERToKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0VudGl0eVJlZmVyZW5jZShKU0VudGl0eVJl
ZmVyZW5jZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RW50aXR5UmVmZXJlbmNl
Kj4obm9kZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IChleGVjKSBKU0VudGl0eVJlZmVyZW5j
ZShKU0VudGl0eVJlZmVyZW5jZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RW50
aXR5UmVmZXJlbmNlKj4obm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNOb2RlKEpTTm9kZVByb3RvdHlwZTo6c2VsZihl
eGVjKSwgbm9kZSk7CisgICAgICAgICAgICByZXQgPSBuZXcgKGV4ZWMpIEpTTm9kZShKU05vZGVQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIG5vZGUpOwogICAgIH0KIAogICAgIFNjcmlwdEludGVycHJl
dGVyOjpwdXRET01Ob2RlRm9yRG9jdW1lbnQoZG9jLCBub2RlLCByZXQpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNWYWx1ZSogSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4
ZWNTdAogICAgIHNob3J0IHJlc3VsdCA9IGltcGwoKS0+YWNjZXB0Tm9kZSh0b05vZGUoYXJnc1sw
XSksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CisgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKIE5vZGVGaWx0ZXIqIHRvTm9kZUZpbHRl
cihLSlM6OkpTVmFsdWUqIHZhbCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcAko
cmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIEpTVmFsdWUqIEpTUkdCQ29sb3I6OmdldFZh
bHVlUHJvcGVydHkoRXgKIEpTVmFsdWUqIGdldEpTUkdCQ29sb3IoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGVxdWFscyBmb3IgUkdC
Q29sb3Igc2luY2UgdGhleSdyZSBub3QgcmVmY291bnRlZCBvYmplY3RzLgotICAgIHJldHVybiBu
ZXcgSlNSR0JDb2xvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlw
ZSgpLCBjb2xvcik7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNSR0JDb2xvcihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBjb2xvcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUqIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRl
bShFeGUKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IG5ldyBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBKU09i
amVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKIAog
ICAgIHVuc2lnbmVkIG51bUNvbHVtbnMgPSBtX2ltcGwtPmNvbHVtbk5hbWVzKCkuc2l6ZSgpOwog
ICAgIHVuc2lnbmVkIHZhbHVlc0luZGV4ID0gaW5kZXggKiBudW1Db2x1bW5zOwpAQCAtNjAsMTMg
KzYwLDEzIEBAIEpTVmFsdWUqIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGUKIAogICAg
ICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6
U3RyaW5nVmFsdWU6Ci0gICAgICAgICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZyh2YWx1ZS5zdHJp
bmcoKSk7CisgICAgICAgICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZyhleGVjLCB2YWx1ZS5zdHJp
bmcoKSk7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51
bGxWYWx1ZToKICAgICAgICAgICAgICAganNWYWx1ZSA9IGpzTnVsbCgpOwogICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZToKLSAgICAgICAg
ICAgICAganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlLm51bWJlcigpKTsKKyAgICAgICAgICAgICAg
anNWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMsIHZhbHVlLm51bWJlcigpKTsKICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudFdy
YXBwZXJGYWN0b3J5LmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcg
KzI4OCw3IEBAIHR5cGVkZWYgSlNOb2RlKiAoKkNyZWF0ZVNWR0VsZW1lbnRXcmFwcGUKICNkZWZp
bmUgQ1JFQVRFX1dSQVBQRVJfRlVOQ1RJT04odGFnLCBuYW1lKSBcCiBzdGF0aWMgSlNOb2RlKiBj
cmVhdGUjI25hbWUjI1dyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNWR0VsZW1l
bnQ+IGVsZW1lbnQpIFwKIHsgXAotICAgIHJldHVybiBuZXcgSlNTVkcjI25hbWUjI0VsZW1lbnQo
SlNTVkcjI25hbWUjI0VsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFNW
RyMjbmFtZSMjRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsgXAorICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTU1ZHIyNuYW1lIyNFbGVtZW50KEpTU1ZHIyNuYW1lIyNFbGVtZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxTVkcjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgp
KSk7IFwKIH0KIEZPUl9FQUNIX1RBRyhDUkVBVEVfV1JBUFBFUl9GVU5DVElPTikKIEZPUl9FQUNI
X0FOSU1BVElPTl9UQUcoQ1JFQVRFX1dSQVBQRVJfRlVOQ1RJT04pCkBAIC0zMTMsNyArMzEzLDcg
QEAgRk9SX0VBQ0hfRk9SRUlHTl9PQkpFQ1RfVEFHKEFERF9UT19IQVNIXwogICAgIENyZWF0ZVNW
R0VsZW1lbnRXcmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0gbWFwLmdldChl
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChjcmVhdGVXcmFwcGVyRnVuY3Rp
b24pCiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZXhlYywgZWxlbWVudCk7
Ci0gICAgcmV0dXJuIG5ldyBKU1NWR0VsZW1lbnQoSlNTVkdFbGVtZW50UHJvdG90eXBlOjpzZWxm
KGV4ZWMpLCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU1NWR0VsZW1l
bnQoSlNTVkdFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBlbGVtZW50LmdldCgpKTsKIH0K
IAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMYXp5
RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDggQEAKIAogI2lu
Y2x1ZGUgIkpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuaCIKIAorI2luY2x1ZGUgIkpTRE9NV2luZG93
LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1
LDcgKzM3LDcgQEAgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lcjo6SlNTVkdMYXp5RXZlbnRMaQogCiBK
U1ZhbHVlKiBKU1NWR0xhenlFdmVudExpc3RlbmVyOjpldmVudFBhcmFtZXRlck5hbWUoKSBjb25z
dAogewotICAgIHN0YXRpYyBQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gZXZlbnRTdHJpbmcgPSBqc1N0
cmluZygiZXZ0Iik7CisgICAgc3RhdGljIFByb3RlY3RlZFB0cjxKU1ZhbHVlPiBldmVudFN0cmlu
ZyA9IGpzU3RyaW5nKHdpbmRvdygpLT5nbG9iYWxFeGVjKCksICJldnQiKTsKICAgICByZXR1cm4g
ZXZlbnRTdHJpbmcuZ2V0KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9y
YWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFn
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgSlNT
dG9yYWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1MKIEpTVmFsdWUqIEpTU3RvcmFnZTo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNTdG9yYWdlKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNTdG9yYWdlKj4oc2xvdC5zbG90
QmFzZSgpKTsKLSAgICByZXR1cm4ganNTdHJpbmdPck51bGwodGhpc09iai0+aW1wbCgpLT5nZXRJ
dGVtKHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChleGVjLCB0aGlz
T2JqLT5pbXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1lKSk7CiB9CiAKIGJvb2wgSlNTdG9yYWdl
OjpjdXN0b21HZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVl
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hl
ZXRDdXN0b20uY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
dHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBKU1Zh
bHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVlCiAgICAgICAgIHJldHVybiByZXQ7
CiAKICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldCA9
IG5ldyBKU0NTU1N0eWxlU2hlZXQoSlNDU1NTdHlsZVNoZWV0UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOworICAgICAgICByZXQg
PSBuZXcgKGV4ZWMpIEpTQ1NTU3R5bGVTaGVldChKU0NTU1N0eWxlU2hlZXRQcm90b3R5cGU6OnNl
bGYoZXhlYyksIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CiAgICAg
ZWxzZQotICAgICAgICByZXQgPSBuZXcgSlNTdHlsZVNoZWV0KEpTU3R5bGVTaGVldFByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3R5bGVTaGVldCk7CisgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNT
dHlsZVNoZWV0KEpTU3R5bGVTaGVldFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3R5bGVTaGVldCk7
CiAKICAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KHN0eWxlU2hlZXQsIHJldCk7
CiAgICAgcmV0dXJuIHJldDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIGJvb2wgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpp
bXBsZW0KIEpTT2JqZWN0KiBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6OmNvbnN0cnVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmKQogewogICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVz
dD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKG1fZG9jdW1lbnQuZ2V0
KCkpOwotICAgIEpTWE1MSHR0cFJlcXVlc3QqIHJldCA9IG5ldyBKU1hNTEh0dHBSZXF1ZXN0KEpT
WE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHhtbEh0dHBSZXF1ZXN0LmdldCgp
KTsKKyAgICBKU1hNTEh0dHBSZXF1ZXN0KiByZXQgPSBuZXcgKGV4ZWMpIEpTWE1MSHR0cFJlcXVl
c3QoSlNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZTo6c2VsZihleGVjKSwgeG1sSHR0cFJlcXVlc3Qu
Z2V0KCkpOwogICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QoeG1sSHR0cFJlcXVl
c3QuZ2V0KCksIHJldCk7CiAgICAgcmV0dXJuIHJldDsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzI3NTcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NywxMSArNzcsMTEgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b25y
ZWFkeXN0YXRlYwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotdm9pZCBKU1hNTEh0dHBSZXF1
ZXN0OjpzZXRPbnJlYWR5c3RhdGVjaGFuZ2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSogdmFsdWUpCit2
b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnNldE9ucmVhZHlzdGF0ZWNoYW5nZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQogewogICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBpbXBs
KCktPmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpKQotICAgICAgICAgICAgaW1wbCgpLT5zZXRPblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5l
cih0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIodmFsdWUsIHRydWUpKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2V0T25SZWFkeVN0YXRl
Q2hhbmdlTGlzdGVuZXIodG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7CiAgICAgfSAgIAogfQogCkBA
IC05MywxMSArOTMsMTEgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b25sb2FkKEV4ZWNT
dAogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjpzZXRP
bmxvYWQoRXhlY1N0YXRlKiwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6
OnNldE9ubG9hZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQogewogICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBpbXBsKCktPmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICAgICAgaW1wbCgpLT5zZXRP
bkxvYWRMaXN0ZW5lcih0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2V0
T25Mb2FkTGlzdGVuZXIodG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7CiAgICAgfQogfQogCkBAIC0x
MDksMTEgKzEwOSwxMSBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpvbnByb2dyZXNzKEV4
CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi12b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnNldE9u
cHJvZ3Jlc3MoRXhlY1N0YXRlKiwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTWE1MSHR0cFJlcXVl
c3Q6OnNldE9ucHJvZ3Jlc3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgpLT5kb2N1bWVudCgpKSB7CiAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGltcGwo
KS0+c2V0T25Qcm9ncmVzc0xpc3RlbmVyKHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVh
dGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSkpOworICAgICAgICAgICAg
aW1wbCgpLT5zZXRPblByb2dyZXNzTGlzdGVuZXIodG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRP
ckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7CiAg
ICAgfQogfQogCkBAIC0xODgsNyArMTg4LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6
Z2V0UmVzcG9uc2VIZQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBKU1ZhbHVlKiBoZWFkZXIgPSBqc1N0cmluZ09yTnVsbChpbXBsKCktPmdldFJlc3BvbnNl
SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBlYykpOworICAgIEpTVmFsdWUqIGhlYWRl
ciA9IGpzU3RyaW5nT3JOdWxsKGV4ZWMsIGltcGwoKS0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYyksIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICByZXR1cm4gaGVhZGVyOwogfQpAQCAtMjEwLDcgKzIxMCw3IEBAIEpTVmFsdWUqIEpTWE1M
SHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGUKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSB0b0pTRE9NV2luZG93
KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwg
dHJ1ZSk7CisgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gdG9KU0RP
TVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4
ZWMsIGFyZ3NbMV0sIHRydWUpOwogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0
cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CkBAIC0yMjUs
NyArMjI1LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaQogICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JDcmVhdGVKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcihhcmdzWzFdLCB0cnVlKTsKKyAgICBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSB0b0pTRE9NV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJnc1sxXSwgdHJ1ZSk7CiAgICAgaWYgKCFs
aXN0ZW5lcikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lciwgYXJnc1sy
XS0+dG9Cb29sZWFuKGV4ZWMpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJv
Y2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nl
c3Nvci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNWYWx1ZSog
anNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3RpbwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSBh
cmdzWzFdLT50b1N0cmluZyhleGVjKTsKICAgICBTdHJpbmcgdmFsdWUgPSBwcm9jZXNzb3IuZ2V0
UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcodmFsdWUpOworICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgdmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0y
MDEsNyArMjAxLDcgQEAgYm9vbCBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6aW1wbGVtZQog
CiBKU09iamVjdCogSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBKU1hTTFRQcm9j
ZXNzb3IoSlNYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpKTsKKyAgICByZXR1cm4g
bmV3IChleGVjKSBKU1hTTFRQcm9jZXNzb3IoSlNYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxm
KGV4ZWMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfYmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfYmluZGluZy5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfYmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw1MyArMjM0LDUzIEBAIHZv
aWQgU2NyaXB0SW50ZXJwcmV0ZXI6OnVwZGF0ZURPTU5vZGVEb2MKICAgICB9CiB9CiAKLUpTVmFs
dWUqIGpzU3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgcykKK0pTVmFsdWUqIGpzU3RyaW5nT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmIChzLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHMpOwor
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNPd25lZFN0cmlu
Z09yTnVsbChjb25zdCBLSlM6OlVTdHJpbmcmIHMpCitKU1ZhbHVlKiBqc093bmVkU3RyaW5nT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpVU3RyaW5nJiBzKQogewogICAgIGlmIChz
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRT
dHJpbmcocyk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7CiB9CiAKLUpTVmFs
dWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBzKQorSlNWYWx1ZSoganNTdHJp
bmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBp
ZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKHMpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1
ZSoganNTdHJpbmdPckZhbHNlKGNvbnN0IFN0cmluZyYgcykKK0pTVmFsdWUqIGpzU3RyaW5nT3JG
YWxzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7Ci0gICAgcmV0dXJuIGpzU3Ry
aW5nKHMpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNT
dHJpbmdPck51bGwoY29uc3QgS1VSTCYgdXJsKQorSlNWYWx1ZSoganNTdHJpbmdPck51bGwoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBqc1N0cmluZyh1cmwuc3RyaW5n
KCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5nKCkpOwogfQogCi1KU1Zh
bHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IEtVUkwmIHVybCkKK0pTVmFsdWUqIGpzU3Ry
aW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAg
aWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0
dXJuIGpzU3RyaW5nKHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVy
bC5zdHJpbmcoKSk7CiB9CiAKLUpTVmFsdWUqIGpzU3RyaW5nT3JGYWxzZShjb25zdCBLVVJMJiB1
cmwpCitKU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJM
JiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihmYWxzZSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIHVybC5zdHJpbmcoKSk7CiB9CiAKIFVTdHJpbmcgdmFsdWVUb1N0cmlu
Z1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKQEAgLTM2Nywx
MiArMzY3LDEyIEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnIKIEpT
VmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHNsb3Quc3RhdGljRW50
cnkoKTsKLSAgICByZXR1cm4gbmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5sZW5n
dGgsIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uVmFsdWUpOworICAgIHJldHVybiBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5sZW5ndGgsIHByb3BlcnR5TmFt
ZSwgZW50cnktPmZ1bmN0aW9uVmFsdWUpOwogfQogCiBKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7Ci0gICAgcmV0dXJuIG5ldyBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1Rv
U3RyaW5nKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAw
LCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAkocmV2aXNpb24g
MzI3NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDkgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBleHBsaWNp
dCBET01PYmplY3QoS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUpIC8vIEZJWE1FOiB0aGlzIHNob3Vs
ZCB0YWtlIGEgSlNPYmplY3Qgb25jZSBKU0xvY2F0aW9uIGhhcyBhIHJlYWwgcHJvdG90eXBlCiAg
ICAgICAgICAgICA6IEpTT2JqZWN0KHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gRE9NT2JqZWN0IGRlc3RydWN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZSBiZWNhdXNlIERPTU9i
amVjdHMgd3JhcCAKLSAgICAgICAgICAgIC8vIHVuc2FmZSBXZWJDb3JlIERPTSBkYXRhIHN0cnVj
dHVyZXMuCi0gICAgICAgICAgICBLSlM6OkNvbGxlY3Rvcjo6Y29sbGVjdE9uTWFpblRocmVhZE9u
bHkodGhpcyk7CiAgICAgICAgIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTgzLDcgKzgwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNOdWxsKCk7CiAg
ICAgICAgIGlmIChET01PYmplY3QqIHJldCA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmpl
Y3QoZG9tT2JqKSkKICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIERPTU9iamVjdCog
cmV0ID0gbmV3IEpTRE9NT2JqKEpTRE9NT2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBkb21PYmop
OworICAgICAgICBET01PYmplY3QqIHJldCA9IG5ldyAoZXhlYykgSlNET01PYmooSlNET01PYmpQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIGRvbU9iaik7CiAgICAgICAgIFNjcmlwdEludGVycHJldGVy
OjpwdXRET01PYmplY3QoZG9tT2JqLCByZXQpOwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0K
QEAgLTk2LDcgKzkzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJu
IEtKUzo6anNOdWxsKCk7CiAgICAgICAgIGlmIChET01PYmplY3QqIHJldCA9IFNjcmlwdEludGVy
cHJldGVyOjpnZXRET01PYmplY3QoZG9tT2JqKSkKICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIERPTU9iamVjdCogcmV0ID0gbmV3IEpTRE9NT2JqKEpTRE9NT2JqUHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBkb21PYmosIGNvbnRleHQpOworICAgICAgICBET01PYmplY3QqIHJldCA9IG5l
dyAoZXhlYykgSlNET01PYmooSlNET01PYmpQcm90b3R5cGU6OnNlbGYoZXhlYyksIGRvbU9iaiwg
Y29udGV4dCk7CiAgICAgICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QoZG9tT2Jq
LCByZXQpOwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KQEAgLTExNiwxOCArMTEzLDE4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBtX2NvZGU7CiAgICAg
fTsKIAotICAgIEtKUzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwoY29uc3QgU3RyaW5nJik7IC8v
IG51bGwgaWYgdGhlIHN0cmluZyBpcyBudWxsCi0gICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09y
TnVsbChjb25zdCBLVVJMJik7IC8vIG51bGwgaWYgdGhlIFVSTCBpcyBudWxsCisgICAgS0pTOjpK
U1ZhbHVlKiBqc1N0cmluZ09yTnVsbChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAv
LyBudWxsIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEtKUzo6SlNWYWx1ZSoganNTdHJpbmdP
ck51bGwoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIG51bGwgaWYgdGhlIFVSTCBp
cyBudWxsCiAKLSAgICBLSlM6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3Ry
aW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLSAgICBLSlM6OkpTVmFs
dWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgS1VSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhl
IFVSTCBpcyBudWxsCisgICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKEtKUzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlz
IG51bGwKKyAgICBLSlM6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoS0pTOjpFeGVjU3Rh
dGUqLCBjb25zdCBLVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKIAotICAg
IEtKUzo6SlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFu
IGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotICAgIEtKUzo6SlNWYWx1ZSoganNTdHJpbmdP
ckZhbHNlKGNvbnN0IEtVUkwmKTsgLy8gYm9vbGVhbiBmYWxzZSBpZiB0aGUgVVJMIGlzIG51bGwK
KyAgICBLSlM6OkpTVmFsdWUqIGpzU3RyaW5nT3JGYWxzZShLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEtK
Uzo6SlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYp
OyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBVUkwgaXMgbnVsbAogCiAgICAgLy8gU2VlIEphdmFT
Y3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBVU3RyaW5n
IHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCiAgICAgLy8gb2JqZWN0LCB0byBsZXQg
dGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1
bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLSAgICBLSlM6OkpTVmFsdWUqIGpzT3duZWRTdHJpbmdP
ck51bGwoY29uc3QgS0pTOjpVU3RyaW5nJik7IAorICAgIEtKUzo6SlNWYWx1ZSoganNPd25lZFN0
cmluZ09yTnVsbChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6VVN0cmluZyYpOyAKIAogICAg
IEtKUzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhLSlM6OkV4ZWNTdGF0ZSos
IEtKUzo6SlNWYWx1ZSopOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgS0pTOjpV
U3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTVmFsdWUqKTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRl
ZmluZWQKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMzI3NTcp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjMsNyArMjYzLDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omxpc3RlbmVy
TwogCiBKU1ZhbHVlKiBKU0xhenlFdmVudExpc3RlbmVyOjpldmVudFBhcmFtZXRlck5hbWUoKSBj
b25zdAogewotICAgIHN0YXRpYyBQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gZXZlbnRTdHJpbmcgPSBq
c1N0cmluZygiZXZlbnQiKTsKKyAgICBzdGF0aWMgUHJvdGVjdGVkUHRyPEpTVmFsdWU+IGV2ZW50
U3RyaW5nID0ganNTdHJpbmcod2luZG93KCktPmdsb2JhbEV4ZWMoKSwgImV2ZW50Iik7CiAgICAg
cmV0dXJuIGV2ZW50U3RyaW5nLmdldCgpOwogfQogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBK
U0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogCiAgICAgICAgIFVTdHJpbmcgc291
cmNlVVJMKGZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBhcmdzLmFw
cGVuZChldmVudFBhcmFtZXRlck5hbWUoKSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5n
KG1fY29kZSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBtX2NvZGUpKTsK
ICAgICAgICAgbV9saXN0ZW5lciA9IGNvbnN0ci0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MsIG1fZnVu
Y3Rpb25OYW1lLCBzb3VyY2VVUkwsIG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBnbG9iYWxF
eGVjIG9rID8KIAogICAgICAgICBGdW5jdGlvbkltcCogbGlzdGVuZXJBc0Z1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25JbXAqPihtX2xpc3RlbmVyLmdldCgpKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2h0bWwuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2h0bWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyBKU09i
amVjdCogZ2V0UnVudGltZU9iamVjdChFeGVjU3QKICAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQq
IHBsdWdJbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOwog
ICAgICAgICBpZiAocGx1Z0luRWxlbWVudC0+Z2V0SW5zdGFuY2UoKSAmJiBwbHVnSW5FbGVtZW50
LT5nZXRJbnN0YW5jZSgpLT5yb290T2JqZWN0KCkpCiAgICAgICAgICAgICAvLyBUaGUgaW5zdGFu
Y2UgaXMgb3duZWQgYnkgdGhlIFBsdWdJbiBlbGVtZW50LgotICAgICAgICAgICAgcmV0dXJuIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KHBsdWdJbkVsZW1lbnQt
PmdldEluc3RhbmNlKCkpOworICAgICAgICAgICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIHBsdWdJbkVsZW1lbnQtPmdldEluc3RhbmNl
KCkpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDEwICs1MTks
MTEgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9u
IC0tIGNvZGUgYWRvcHRlZCBmcm9tIHRoZSBLSlNfREVGSU5FX1BST1RPVFlQRSBhbmQgS0pTX0RF
RklORV9QUk9UT1RZUEVfV0lUSF9QUk9UT1RZUEUgbWFjcm9zCiAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgImNsYXNzICR7Y2xhc3NOYW1lfVByb3RvdHlwZSA6IHB1YmxpYyBLSlM6OkpTT2JqZWN0
IHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKLSAgICBpZiAo
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDYWNoZSJ9KSB7CisgICAgaWYg
KCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIEtKUzo6SlNPYmplY3QqIHNlbGYoKTtcbiIpOworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpO1xuIik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
S0pTOjpKU09iamVjdCogc2VsZihLSlM6OkV4ZWNTdGF0ZSogZXhlYyk7XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU09iamVjdCogc2VsZihLSlM6
OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JnNfaW5mbzsgfVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgY29u
c3QgS0pTOjpDbGFzc0luZm8gc19pbmZvO1xuIik7CkBAIC03MzIsOSArNzMzLDEzIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgImNvbnN0IENs
YXNzSW5mbyAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNfaW5mbyA9IHsgXCIke3Zpc2libGVDbGFz
c05hbWV9UHJvdG90eXBlXCIsIDAsICYke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSwgMCB9O1xu
XG4iKTsKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDYWNo
ZSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NOYW1l
fVByb3RvdHlwZTo6c2VsZigpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09i
amVjdCogJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKCIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgICAgICJFeGVjU3RhdGUqIGV4ZWMiKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEg
IkRPTVdpbmRvdyI7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAgICAgIilcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gbmV3ICR7Y2xhc3NOYW1lfVByb3RvdHlwZSgpO1xuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBuZXcgIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAgICAgICIoZXhlYykgIikgdW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJET01X
aW5kb3ciOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgICAgICAiJHtjbGFzc05hbWV9UHJv
dG90eXBlKCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NO
YW1lfVByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKQEAgLTc0Myw2ICs3NDgs
MTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIEtKUzo6Y2FjaGVHbG9iYWxPYmplY3Q8JHtjbGFzc05hbWV9UHJvdG90
eXBlPihleGVjLCAqcHJvdG90eXBlSWRlbnRpZmllcik7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRP
TVdpbmRvdyIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkKiAke2NsYXNzTmFt
ZX1Qcm90b3R5cGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSlcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSGVhcDo6dGhyZWFkSGVhcCgpLT5hbGxvY2F0ZShzaXplKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQogICAgIGlmICgkbnVtQ29uc3RhbnRz
ID4gMCB8fCAkbnVtRnVuY3Rpb25zID4gMCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
ImJvb2wgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtNzU2LDkgKzc2
Nyw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKICAgICB9CiAgICAgaWYgKCRudW1Db25zdGFudHMgbmUgMCkgewotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0XG57XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0XG57XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gVGhlIHRva2VuIGlzIHRoZSBu
dW1lcmljIHZhbHVlIG9mIGl0cyBhc3NvY2lhdGVkIGNvbnN0YW50XG4iKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGpzTnVtYmVyKHRva2VuKTtcbn1cblxuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBqc051bWJlcihleGVjLCB0b2tl
bik7XG59XG5cbiIpOwogICAgIH0KIAogICAgICMgLSBJbml0aWFsaXplIHN0YXRpYyBDbGFzc0lu
Zm8gb2JqZWN0CkBAIC0xMjUxLDcgKzEyNjIsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oc2xvdC5zbG90QmFzZSgpKTtcbiIpOwogICAgICAg
ICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncygkaW1wbENsYXNzTmFtZSkpIHsKICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IktVUkwuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBqc1N0cmluZ09yTnVsbCh0aGlzT2JqLT5pbXBsKCktPml0
ZW0oc2xvdC5pbmRleCgpKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChleGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW0oc2xv
dC5pbmRleCgpKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NO
YW1lKj4odGhpc09iai0+aW1wbCgpKS0+aXRlbShzbG90LmluZGV4KCkpKTtcbiIpOwogICAgICAg
ICB9CkBAIC0xNDg1LDE5ICsxNDk2LDE5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAk
dHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKIAog
ICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKLSAg
ICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2
ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJTVkdQYWludFR5cGUiIG9yICR0eXBlIGVxICJET01U
aW1lU3RhbXAiOworICAgIHJldHVybiAianNOdW1iZXIoZXhlYywgJHZhbHVlKSIgaWYgJGNvZGVH
ZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJHR5cGUgZXEgIlNWR1BhaW50VHlw
ZSIgb3IgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siS1VSTC5oIn0g
PSAxOwogICAgICAgICBteSAkY29udiA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb252ZXJ0TnVsbFN0cmluZ1RvIn07CiAgICAgICAgIGlmIChkZWZpbmVkICRjb252KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JOdWxsKCR2YWx1ZSkiIGlmICRjb252IGVxICJO
dWxsIjsKLSAgICAgICAgICAgIHJldHVybiAianNTdHJpbmdPclVuZGVmaW5lZCgkdmFsdWUpIiBp
ZiAkY29udiBlcSAiVW5kZWZpbmVkIjsKLSAgICAgICAgICAgIHJldHVybiAianNTdHJpbmdPckZh
bHNlKCR2YWx1ZSkiIGlmICRjb252IGVxICJGYWxzZSI7CisgICAgICAgICAgICByZXR1cm4gImpz
U3RyaW5nT3JOdWxsKGV4ZWMsICR2YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKKyAgICAgICAg
ICAgIHJldHVybiAianNTdHJpbmdPclVuZGVmaW5lZChleGVjLCAkdmFsdWUpIiBpZiAkY29udiBl
cSAiVW5kZWZpbmVkIjsKKyAgICAgICAgICAgIHJldHVybiAianNTdHJpbmdPckZhbHNlKGV4ZWMs
ICR2YWx1ZSkiIGlmICRjb252IGVxICJGYWxzZSI7CiAKICAgICAgICAgICAgIGRpZSAiVW5rbm93
biB2YWx1ZSBmb3IgQ29udmVydE51bGxTdHJpbmdUbyBleHRlbmRlZCBhdHRyaWJ1dGUiOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAianNTdHJpbmcoJHZhbHVlKSI7CisgICAgICAgIHJldHVy
biAianNTdHJpbmcoZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJS
R0JDb2xvciIpIHsKQEAgLTE3ODYsMTAgKzE3OTcsMTAgQEAgYm9vbCAke2NsYXNzTmFtZX1Db25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8JHtjbGFz
c05hbWV9Q29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgJiR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqICR7Y2xh
c3NOYW1lfUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tl
bikgY29uc3QKK0pTVmFsdWUqICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIC8vIFRoZSB0b2tl
biBpcyB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBpdHMgYXNzb2NpYXRlZCBjb25zdGFudAotICAgIHJl
dHVybiBqc051bWJlcih0b2tlbik7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRva2VuKTsK
IH0KIAogRU9GCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3Jl
L2JyaWRnZS9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgSW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUKICAgICBhRmllbGQtPnNldFZh
bHVlVG9JbnN0YW5jZShleGVjLCB0aGlzLCBhVmFsdWUpOwogfQogCi1KU09iamVjdCogSW5zdGFu
Y2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCitK
U09iamVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQ
YXNzUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSkKIHsKICNpZiBQTEFURk9STShRVCkKICAgICBp
ZiAoaW5zdGFuY2UtPmdldEJpbmRpbmdMYW5ndWFnZSgpID09IFF0TGFuZ3VhZ2UpCkBAIC0xMDgs
NyArMTA4LDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAogI2Vu
ZGlmCiAgICAgSlNMb2NrIGxvY2s7CiAKLSAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAo
aW5zdGFuY2UpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVPYmplY3RJbXAoaW5zdGFu
Y2UpOwogfQogCiBJbnN0YW5jZSogSW5zdGFuY2U6OmdldEluc3RhbmNlKEpTT2JqZWN0KiBvYmpl
Y3QsIEJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgJKHJldmlzaW9uIDMy
NzU3KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
NyArMTA3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRHbG9iYWxPYmpl
Y3QoSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGN1cnJlbnRH
bG9iYWxPYmplY3QoKTsKIAotICAgIHN0YXRpYyBKU09iamVjdCogY3JlYXRlUnVudGltZU9iamVj
dChQYXNzUmVmUHRyPEluc3RhbmNlPik7CisgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSdW50
aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKICAgICBzdGF0aWMg
SW5zdGFuY2UqIGdldEluc3RhbmNlKEpTT2JqZWN0KiwgQmluZGluZ0xhbmd1YWdlKTsKIAogICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1haW4g
ZW50cnkgcG9pbnRzIGludG8KQEAgLTEzMSw5ICsxMzEsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmKSB7IH0KIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVlKEpTVHlwZSBoaW50
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiwgSlNUeXBlIGhpbnQpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZh
bHVlT2YoKSBjb25zdCB7IHJldHVybiBqc1N0cmluZyhnZXRDbGFzcygpLT5uYW1lKCkpOyB9Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgeyByZXR1
cm4ganNTdHJpbmcoZXhlYywgZ2V0Q2xhc3MoKS0+bmFtZSgpKTsgfQogICAgIAogICAgIFJvb3RP
YmplY3QqIHJvb3RPYmplY3QoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgUnVudGltZUFycmF5OjpSdW50
aW1lQXJyYXkoRXhlY1N0YXRlICpleAogewogfQogCi1KU1ZhbHVlICpSdW50aW1lQXJyYXk6Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkgKnRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxSdW50aW1lQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgICByZXR1cm4ganNOdW1i
ZXIodGhpc09iai0+Z2V0TGVuZ3RoKCkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCB0aGlz
T2JqLT5nZXRMZW5ndGgoKSk7CiB9CiAKIEpTVmFsdWUgKlJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZp
c2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBSdW50aW1lTWV0aG9kOjpSdW50aW1lTWV0aG9kKEV4
ZWNTdGF0ZSAqCiB7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlKiBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgUnVudGltZU1ldGhvZCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVNZXRob2QgKj4oc2xvdC5zbG90QmFzZSgpKTsKIApAQCAtNDgsNyArNDgsNyBAQCBKU1ZhbHVl
ICpSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlCiAgICAgLy8gSmF2YSBkb2VzLgogICAg
IC8vIEZJWE1FOiBhIGJldHRlciBzb2x1dGlvbiBtaWdodCBiZSB0byBnaXZlIHRoZSBtYXhpbXVt
IG51bWJlciBvZiBwYXJhbWV0ZXJzCiAgICAgLy8gb2YgYW55IG1ldGhvZAotICAgIHJldHVybiBq
c051bWJlcih0aGlzT2JqLT5fbWV0aG9kTGlzdC0+YXQoMCktPm51bVBhcmFtZXRlcnMoKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRoaXNPYmotPl9tZXRob2RMaXN0LT5hdCgwKS0+bnVt
UGFyYW1ldGVycygpKTsKIH0KIAogYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCAmc2xvdCkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9u
IDMyNzU3KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw2IEBAIFJ1bnRpbWVPYmplY3RJbXA6OlJ1bnRpbWVPYmplY3RJbXAo
UGFzc1IKICAgICA6IGluc3RhbmNlKGkpCiB7CiAgICAgaW5zdGFuY2UtPnJvb3RPYmplY3QoKS0+
YWRkUnVudGltZU9iamVjdCh0aGlzKTsKLSAgICBDb2xsZWN0b3I6OmNvbGxlY3RPbk1haW5UaHJl
YWRPbmx5KHRoaXMpOwogfQogCiBSdW50aW1lT2JqZWN0SW1wOjp+UnVudGltZU9iamVjdEltcCgp
CkBAIC0xMDIsNyArMTAxLDcgQEAgSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0
dGVyKAogCiAgICAgQ2xhc3MgKmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwogICAgIE1l
dGhvZExpc3QgbWV0aG9kTGlzdCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwg
aW5zdGFuY2UuZ2V0KCkpOwotICAgIEpTVmFsdWUgKnJlc3VsdCA9IG5ldyBSdW50aW1lTWV0aG9k
KGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0g
bmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7
CiAKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKQEAgLTE4OSw3ICsxODgsNyBA
QCBKU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoCiAgICAgUmVmUHRyPEJp
bmRpbmdzOjpJbnN0YW5jZT4gcHJvdGVjdG9yKGluc3RhbmNlKTsKICAgICBpbnN0YW5jZS0+YmVn
aW4oKTsKIAotICAgIHJlc3VsdCA9IGluc3RhbmNlLT5kZWZhdWx0VmFsdWUoaGludCk7CisgICAg
cmVzdWx0ID0gaW5zdGFuY2UtPmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKICAgICAKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDMyNzU3KQorKysgV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDI4ICsxMzMsMjggQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VEZWZh
dWx0TWV0aG9kKAogfQogCiAKLUpTVmFsdWUqIENJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTVHlw
ZSBoaW50KSBjb25zdAorSlNWYWx1ZSogQ0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBKU1R5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaGludCA9PSBTdHJpbmdUeXBl
KQotICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ1Zh
bHVlKGV4ZWMpOwogICAgIGlmIChoaW50ID09IE51bWJlclR5cGUpCi0gICAgICAgIHJldHVybiBu
dW1iZXJWYWx1ZSgpOworICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUoZXhlYyk7CiAgICBpZiAo
aGludCA9PSBCb29sZWFuVHlwZSkKICAgICAgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSgpOwotICAg
IHJldHVybiB2YWx1ZU9mKCk7CisgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CiB9CiAKLUpTVmFs
dWUqIENJbnN0YW5jZTo6c3RyaW5nVmFsdWUoKSBjb25zdAorSlNWYWx1ZSogQ0luc3RhbmNlOjpz
dHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgY2hhciBidWZbMTAyNF07
CiAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIk5QT2JqZWN0ICVwLCBOUENsYXNzICVw
IiwgX29iamVjdCwgX29iamVjdC0+X2NsYXNzKTsKLSAgICByZXR1cm4ganNTdHJpbmcoYnVmKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNl
OjpudW1iZXJWYWx1ZSgpIGNvbnN0CitKU1ZhbHVlKiBDSW5zdGFuY2U6Om51bWJlclZhbHVlKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0aGlu
ZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNOdW1iZXIoMCk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIDApOwogfQogCiBKU1ZhbHVlKiBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0
CkBAIC0xNjMsOSArMTYzLDkgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBj
b25zdAogICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogfQogCi1KU1ZhbHVlKiBDSW5zdGFu
Y2U6OnZhbHVlT2YoKSBjb25zdCAKK0pTVmFsdWUqIENJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0IAogewotICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOworICAgIHJldHVy
biBzdHJpbmdWYWx1ZShleGVjKTsKIH0KIAogdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFt
ZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmIG5hbWVBcnJheSkgCkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuaAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSlNWYWx1
ZSAqdmFsdWVPZigpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSAqZGVmYXVsdFZhbHVlIChK
U1R5cGUgaGludCkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0
ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSos
IEpTVHlwZSBoaW50KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgp
IGNvbnN0OwogICAgIApAQCAtNTksOSArNTksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU1Zh
bHVlICppbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5Jik7CiAKLSAgICBKU1ZhbHVlICpzdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAg
IEpTVmFsdWUgKm51bWJlclZhbHVlKCkgY29uc3Q7Ci0gICAgSlNWYWx1ZSAqYm9vbGVhblZhbHVl
KCkgY29uc3Q7CisgICAgSlNWYWx1ZSogc3RyaW5nVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgSlNWYWx1ZSogbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSog
Ym9vbGVhblZhbHVlKCkgY29uc3Q7CiAgICAgCiAgICAgTlBPYmplY3QgKmdldE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIF9vYmplY3Q7IH0KIApJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxp
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2
aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4
ZWNTdGF0ZSogCiAgICAgfQogfQogCi1KU1ZhbHVlKiBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShF
eGVjU3RhdGUqLCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQsIFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QpCitKU1ZhbHVlKiBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IE5QVmFyaWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKICAgICBK
U0xvY2sgbG9jazsKICAgICAKQEAgLTEyMCwxMSArMTIwLDExIEBAIEpTVmFsdWUqIGNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGEKICAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1Zv
aWQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICh0eXBlID09IE5QVmFy
aWFudFR5cGVfSW50MzIpCi0gICAgICAgIHJldHVybiBqc051bWJlcihOUFZBUklBTlRfVE9fSU5U
MzIoKnZhcmlhbnQpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIE5QVkFSSUFOVF9U
T19JTlQzMigqdmFyaWFudCkpOwogICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfRG91Ymxl
KQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTlBWQVJJQU5UX1RPX0RPVUJMRSgqdmFyaWFudCkp
OworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgTlBWQVJJQU5UX1RPX0RPVUJMRSgqdmFy
aWFudCkpOwogICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoY29udmVydE5QU3RyaW5nVG9VVEYxNigmdmFyaWFudC0+dmFsdWUuc3Ry
aW5nVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGNvbnZlcnROUFN0cmlu
Z1RvVVRGMTYoJnZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlKSk7CiAgICAgaWYgKHR5cGUgPT0g
TlBWYXJpYW50VHlwZV9PYmplY3QpIHsKICAgICAgICAgTlBPYmplY3QqIG9iaiA9IHZhcmlhbnQt
PnZhbHVlLm9iamVjdFZhbHVlOwogICAgICAgICAKQEAgLTEzMyw3ICsxMzMsNyBAQCBKU1ZhbHVl
KiBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhCiAgICAgICAgICAgICByZXR1cm4gKChK
YXZhU2NyaXB0T2JqZWN0KilvYmopLT5pbXA7CiAKICAgICAgICAgLy8gV3JhcCBOUE9iamVjdCBp
biBhIENJbnN0YW5jZS4KLSAgICAgICAgcmV0dXJuIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KENJbnN0YW5jZTo6Y3JlYXRlKG9iaiwgcm9vdE9iamVjdCkpOworICAgICAgICByZXR1cm4g
SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywgQ0luc3RhbmNlOjpjcmVhdGUob2Jq
LCByb290T2JqZWN0KSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJ
bmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysg
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDcgQEAgQ2xhc3MgKkphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdCAKICAgICBy
ZXR1cm4gX2NsYXNzOwogfQogCi1KU1ZhbHVlICpKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKCkg
Y29uc3QKK0pTVmFsdWUqIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewogICAgIEpTTG9jayBsb2NrOwogICAgIApAQCAtODYsMTMgKzg2LDEzIEBAIEpT
VmFsdWUgKkphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoKSBjb24KICAgICBjb25zdCBqY2hhciAq
YyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihlbnYsIHN0cmluZ1ZhbHVlKTsKICAg
ICBVU3RyaW5nIHUoKGNvbnN0IFVDaGFyICopYywgKGludCllbnYtPkdldFN0cmluZ0xlbmd0aChz
dHJpbmdWYWx1ZSkpOwogICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlbnYs
IHN0cmluZ1ZhbHVlLCBjKTsKLSAgICByZXR1cm4ganNTdHJpbmcodSk7CisgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHUpOwogfQogCi1KU1ZhbHVlICpKYXZhSW5zdGFuY2U6Om51bWJlclZhbHVl
KCkgY29uc3QKK0pTVmFsdWUqIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIGpkb3VibGUgZG91YmxlVmFsdWUgPSBjYWxsSk5JTWV0aG9kPGpk
b3VibGU+KF9pbnN0YW5jZS0+X2luc3RhbmNlLCAiZG91YmxlVmFsdWUiLCAiKClEIik7Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGRvdWJsZVZhbHVlKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
ZG91YmxlVmFsdWUpOwogfQogCiBKU1ZhbHVlICpKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgp
IGNvbnN0CkBAIC0xNTYsNyArMTU2LDcgQEAgSlNWYWx1ZSAqSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QgKEV4ZQogICAgICAgICBqb2JqZWN0IG9iaiA9IF9pbnN0YW5jZS0+X2luc3RhbmNlOwog
ICAgICAgICBKU1ZhbHVlICpleGNlcHRpb25EZXNjcmlwdGlvbiA9IE5VTEw7CiAgICAgICAgIGNv
bnN0IGNoYXIgKmNhbGxpbmdVUkwgPSAwOyAgLy8gRklYTUUsIG5lZWQgdG8gcHJvcGFnYXRlIGNh
bGxpbmcgVVJMIHRvIEphdmEKLSAgICAgICAgaGFuZGxlZCA9IGRpc3BhdGNoSk5JQ2FsbChyb290
T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9kLT5pc1N0YXRpYygpLCBqTWV0aG9k
LT5KTklSZXR1cm5UeXBlKCksIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdzLCByZXN1bHQs
IGNhbGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKKyAgICAgICAgaGFuZGxlZCA9IGRp
c3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0
aG9kLT5pc1N0YXRpYygpLCBqTWV0aG9kLT5KTklSZXR1cm5UeXBlKCksIGpNZXRob2QtPm1ldGhv
ZElEKG9iaiksIGpBcmdzLCByZXN1bHQsIGNhbGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
KTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24tPnRvU3RyaW5n
KGV4ZWMpKTsKICAgICAgICAgICAgIGZyZWUgKGpBcmdzKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBK
U1ZhbHVlICpKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlCiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFZhbHVlID0gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywg
cmVzdWx0LmwsIGFycmF5VHlwZSwgcm9vdE9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IElu
c3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEphdmFJbnN0YW5jZTo6Y3JlYXRlKHJlc3VsdC5s
LCByb290T2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFZhbHVlID0gSW5zdGFu
Y2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywgSmF2YUluc3RhbmNlOjpjcmVhdGUocmVzdWx0
LmwsIHJvb3RPYmplY3QpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIHsKQEAgLTIzNCwzNyArMjM0LDM3IEBAIEpTVmFsdWUgKkphdmFJbnN0YW5j
ZTo6aW52b2tlTWV0aG9kIChFeGUKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBj
YXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihyZXN1
bHQuYik7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMsIHJlc3VsdC5i
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGNhc2UgY2hh
cl90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5jKTsK
KyAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LmMpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBzaG9ydF90eXBl
OiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5zKTsKKyAgICAg
ICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LnMpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAg
ICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihyZXN1bHQuaSk7CisgICAgICAgICAgICBy
ZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMsIHJlc3VsdC5pKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAg
ICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5qKTsKKyAgICAgICAgICAgIHJlc3VsdFZh
bHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LmopOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7Ci0gICAgICAgICAgICByZXN1
bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5mKTsKKyAgICAgICAgICAgIHJlc3VsdFZhbHVlID0g
anNOdW1iZXIoZXhlYywgcmVzdWx0LmYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0VmFs
dWUgPSBqc051bWJlcihyZXN1bHQuZCk7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVt
YmVyKGV4ZWMsIHJlc3VsdC5kKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtMjgw
LDM2ICsyODAsMzAgQEAgSlNWYWx1ZSAqSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4ZQog
ICAgIHJldHVybiByZXN1bHRWYWx1ZTsKIH0KIAotSlNWYWx1ZSAqSmF2YUluc3RhbmNlOjpkZWZh
dWx0VmFsdWUgKEpTVHlwZSBoaW50KSBjb25zdAorSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpkZWZh
dWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGUgaGludCkgY29uc3QKIHsKLSAgICBpZiAo
aGludCA9PSBTdHJpbmdUeXBlKSB7Ci0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwotICAg
IH0KLSAgICBlbHNlIGlmIChoaW50ID09IE51bWJlclR5cGUpIHsKLSAgICAgICAgcmV0dXJuIG51
bWJlclZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGhpbnQgPT0gQm9vbGVhblR5cGUpIHsK
KyAgICBpZiAoaGludCA9PSBTdHJpbmdUeXBlKQorICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUo
ZXhlYyk7CisgICAgaWYgKGhpbnQgPT0gTnVtYmVyVHlwZSkKKyAgICAgICAgcmV0dXJuIG51bWJl
clZhbHVlKGV4ZWMpOworICAgIGlmIChoaW50ID09IEJvb2xlYW5UeXBlKQogICAgICAgICByZXR1
cm4gYm9vbGVhblZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGhpbnQgPT0gVW5zcGVjaWZp
ZWRUeXBlKSB7CisgICAgaWYgKGhpbnQgPT0gVW5zcGVjaWZpZWRUeXBlKSB7CiAgICAgICAgIEph
dmFDbGFzcyAqYUNsYXNzID0gc3RhdGljX2Nhc3Q8SmF2YUNsYXNzKj4oZ2V0Q2xhc3MoKSk7Ci0g
ICAgICAgIGlmIChhQ2xhc3MtPmlzU3RyaW5nQ2xhc3MoKSkgewotICAgICAgICAgICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYUNsYXNzLT5pc051
bWJlckNsYXNzKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKGFDbGFzcy0+aXNCb29sZWFuQ2xhc3MoKSkgeworICAgICAg
ICBpZiAoYUNsYXNzLT5pc1N0cmluZ0NsYXNzKCkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5n
VmFsdWUoZXhlYyk7CisgICAgICAgIGlmIChhQ2xhc3MtPmlzTnVtYmVyQ2xhc3MoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVjKTsKKyAgICAgICAgaWYgKGFDbGFzcy0+aXNC
b29sZWFuQ2xhc3MoKSkKICAgICAgICAgICAgIHJldHVybiBib29sZWFuVmFsdWUoKTsKLSAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4gdmFsdWVPZigpOworICAgIHJldHVybiB2YWx1
ZU9mKGV4ZWMpOwogfQogCi1KU1ZhbHVlICpKYXZhSW5zdGFuY2U6OnZhbHVlT2YoKSBjb25zdCAK
K0pTVmFsdWUqIEphdmFJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IAog
ewotICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOworICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVj
KTsKIH0KIAogSk9iamVjdFdyYXBwZXI6OkpPYmplY3RXcmFwcGVyKGpvYmplY3QgaW5zdGFuY2Up
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oCShyZXZpc2lvbiAzMjc1NykKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTYg
Kzc3LDE2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNv
bnN0OwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSAqdmFsdWVPZigpIGNvbnN0OwotICAgIHZp
cnR1YWwgSlNWYWx1ZSAqZGVmYXVsdFZhbHVlIChKU1R5cGUgaGludCkgY29uc3Q7CisgICAgdmly
dHVhbCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNW
YWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIEpTVHlwZSBoaW50KSBjb25zdDsKIAogICAg
IHZpcnR1YWwgSlNWYWx1ZSAqaW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1l
dGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICBqb2JqZWN0IGphdmFJ
bnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIF9pbnN0YW5jZS0+X2luc3RhbmNlOyB9CiAgICAgCi0g
ICAgSlNWYWx1ZSAqc3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICBKU1ZhbHVlICpudW1iZXJWYWx1
ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgKmJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIEpTVmFs
dWUqIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWUqIG51bWJlclZh
bHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgZ2V0QmluZGluZ0xhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gSmF2YUxhbmd1YWdlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfanNvYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0LmgJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgS0pTIHsKIAog
Y2xhc3MgTGlzdDsKK2NsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNW
YWx1ZTsKIApAQCAtOTEsOCArOTIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGp2YWx1ZSBpbnZv
a2UoSlNPYmplY3RDYWxsQ29udGV4dCopOwogCiAgICAgam9iamVjdCBjb252ZXJ0VmFsdWVUb0pP
YmplY3QoSlNWYWx1ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIGNvbnZlcnRKT2JqZWN0VG9WYWx1
ZShqb2JqZWN0KSBjb25zdDsKLSAgICB2b2lkIGdldExpc3RGcm9tSkFycmF5KGpvYmplY3RBcnJh
eSwgTGlzdCYpIGNvbnN0OworICAgIEpTVmFsdWUqIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVj
U3RhdGUqLCBqb2JqZWN0KSBjb25zdDsKKyAgICB2b2lkIGdldExpc3RGcm9tSkFycmF5KEV4ZWNT
dGF0ZSosIGpvYmplY3RBcnJheSwgTGlzdCYpIGNvbnN0OwogICAgIAogICAgIFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbQkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmNhbGwoanN0cmluZyBtZXRobwogICAgIEpTT2JqZWN0ICpmdW5jSW1wID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihmdW5jKTsKICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPihfaW1wKTsKICAgICBMaXN0IGFyZ0xpc3Q7Ci0gICAgZ2V0TGlzdEZyb21KQXJy
YXkoYXJncywgYXJnTGlzdCk7CisgICAgZ2V0TGlzdEZyb21KQXJyYXkoZXhlYywgYXJncywgYXJn
TGlzdCk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNr
KCk7CiAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gZnVuY0ltcC0+Y2FsbChleGVjLCB0aGlzT2JqLCBh
cmdMaXN0KTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVvdXRDaGVj
aygpOwpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIoanN0
cmluZyBtZW0KIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgSlNMb2NrIGxvY2s7Ci0gICAgX2ltcC0+cHV0KGV4ZWMs
IElkZW50aWZpZXIgKEphdmFTdHJpbmcobWVtYmVyTmFtZSkudXN0cmluZygpKSwgY29udmVydEpP
YmplY3RUb1ZhbHVlKHZhbHVlKSk7CisgICAgX2ltcC0+cHV0KGV4ZWMsIElkZW50aWZpZXIgKEph
dmFTdHJpbmcobWVtYmVyTmFtZSkudXN0cmluZygpKSwgY29udmVydEpPYmplY3RUb1ZhbHVlKGV4
ZWMsIHZhbHVlKSk7CiB9CiAKIApAQCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0
OjpzZXRTbG90KGppbnQgaW5kZXgsIGoKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgSlNMb2NrIGxvY2s7Ci0gICAg
X2ltcC0+cHV0KGV4ZWMsICh1bnNpZ25lZClpbmRleCwgY29udmVydEpPYmplY3RUb1ZhbHVlKHZh
bHVlKSk7CisgICAgX2ltcC0+cHV0KGV4ZWMsICh1bnNpZ25lZClpbmRleCwgY29udmVydEpPYmpl
Y3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSk7CiB9CiAKIApAQCAtNTY5LDcgKzU2OSw3IEBAIGpvYmpl
Y3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlICpKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSAoam9iamVj
dCB0aGVPYmplY3QpIGNvbnN0CitKU1ZhbHVlKiBKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0
VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgdGhlT2JqZWN0KSBjb25zdAogewogICAg
IC8vIEluc3RhbmNlcyBvZiBuZXRzY2FwZS5qYXZhc2NyaXB0LkpTT2JqZWN0IGdldCBjb252ZXJ0
ZWQgYmFjayB0bwogICAgIC8vIEphdmFTY3JpcHQgb2JqZWN0cy4gIEFsbCBvdGhlciBvYmplY3Rz
IGFyZSB3cmFwcGVkLiAgSXQncyBub3QKQEAgLTYwMCwxMCArNjAwLDEwIEBAIEpTVmFsdWUgKkph
dmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1YKIAogICAgIEpTTG9jayBsb2NrOwogCi0gICAg
cmV0dXJuIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEphdmFJ
bnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpKTsKKyAgICByZXR1cm4gS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywgSmF2YUluc3Rh
bmNlOjpjcmVhdGUodGhlT2JqZWN0LCBfcm9vdE9iamVjdCkpOwogfQogCi12b2lkIEphdmFKU09i
amVjdDo6Z2V0TGlzdEZyb21KQXJyYXkoam9iamVjdEFycmF5IGpBcnJheSwgTGlzdCYgbGlzdCkg
Y29uc3QKK3ZvaWQgSmF2YUpTT2JqZWN0OjpnZXRMaXN0RnJvbUpBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIGpvYmplY3RBcnJheSBqQXJyYXksIExpc3QmIGxpc3QpIGNvbnN0CiB7CiAgICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBpbnQgaSwgbnVtT2JqZWN0cyA9IGpBcnJheSA/IGVu
di0+R2V0QXJyYXlMZW5ndGggKGpBcnJheSkgOiAwOwpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQg
SmF2YUpTT2JqZWN0OjpnZXRMaXN0RnJvbUpBcnJheShqb2IKICAgICBmb3IgKGkgPSAwOyBpIDwg
bnVtT2JqZWN0czsgaSsrKSB7CiAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSBlbnYtPkdldE9i
amVjdEFycmF5RWxlbWVudCAoKGpvYmplY3RBcnJheSlqQXJyYXksIGkpOwogICAgICAgICBpZiAo
YW5PYmplY3QpIHsKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGNvbnZlcnRKT2JqZWN0VG9WYWx1
ZShhbk9iamVjdCkpOworICAgICAgICAgICAgbGlzdC5hcHBlbmQoY29udmVydEpPYmplY3RUb1Zh
bHVlKGV4ZWMsIGFuT2JqZWN0KSk7CiAgICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChh
bk9iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9v
YmpjLm1tCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOjpC
aW5kaW5nczsKICAgICAgICBleGNlcHRpb25EZXNjcmlwdGlvbjooTlNTdHJpbmcgKiopZXhjZXB0
aW9uU3RyaW5nOwogQGVuZAogCi1ib29sIEtKUzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbCAo
Y29uc3Qgdm9pZCAqdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMs
IEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MsIGp2
YWx1ZSAmcmVzdWx0LCBjb25zdCBjaGFyKiwgSlNWYWx1ZSAqJmV4Y2VwdGlvbkRlc2NyaXB0aW9u
KQorYm9vbCBLSlM6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywg
Sk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSogYXJncywganZh
bHVlICZyZXN1bHQsIGNvbnN0IGNoYXIqLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGVzY3JpcHRpb24p
CiB7CiAgICAgaWQgdmlldyA9IChpZCl0YXJnZXRBcHBsZXRWaWV3OwogICAgIApAQCAtNjUsNyAr
NjUsNyBAQCBib29sIEtKUzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbCAoY29uCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoX2V4Y2VwdGlvbkRlc2NyaXB0aW9uICE9IDApIHsKLSAgICAgICAg
ICAgIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gY29udmVydE5TU3RyaW5nVG9TdHJpbmcoX2V4Y2Vw
dGlvbkRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gY29u
dmVydE5TU3RyaW5nVG9TdHJpbmcoZXhlYywgX2V4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9q
bmkvam5pX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
cnVudGltZS5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9y
dW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBKU1ZhbHVlKiBKYXZh
QXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJhCiAgICAgaWYgKHR5cGVbMF0gIT0gJ1snKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBuZXcgUnVudGltZUFycmF5
KGV4ZWMsIG5ldyBKYXZhQXJyYXkoKGpvYmplY3QpYW5PYmplY3QsIHR5cGUsIHJvb3RPYmplY3Qp
KTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXkoZXhlYywgbmV3IEphdmFBcnJh
eSgoam9iamVjdClhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOwogfQogCiBqdmFsdWUgSmF2
YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SmF2YUluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0CkBAIC05NSw3ICs5NSw3IEBAIGp2YWx1ZSBKYXZh
RmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAgICAgICAgICAgICAgICBqdmFsdWUgYXJn
c1sxXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5z
dGFuY2U7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKHJvb3RPYmplY3QtPm5hdGl2
ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywg
cmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgZGlzcGF0
Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5j
ZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNj
cmlwdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQogICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9u
RGVzY3JpcHRpb24tPnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIH0KQEAgLTEyMSw3ICsx
MjEsNyBAQCBKU1ZhbHVlICpKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4CiAgICAgICAg
ICAgICAgICAganNyZXN1bHQgPSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShleGVj
LCBhbk9iamVjdCwgYXJyYXlUeXBlLCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGFuT2JqZWN0ICE9IDApewotICAgICAgICAgICAg
ICAgIGpzcmVzdWx0ID0gSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoSmF2YUluc3RhbmNl
OjpjcmVhdGUoYW5PYmplY3QsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpKTsKKyAgICAgICAgICAg
ICAgICBqc3Jlc3VsdCA9IEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIEphdmFJ
bnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMzgsNyArMTM4LDcgQEAg
SlNWYWx1ZSAqSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeAogICAgICAgICAgICAgamlu
dCB2YWx1ZTsKICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUlu
c3RhbmNlIChleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUki
LCBpbnRfdHlwZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAg
anNyZXN1bHQgPSBqc051bWJlcigoaW50KXZhbHVlKTsKKyAgICAgICAgICAgIGpzcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgKGludCl2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAK
QEAgLTE0OCw3ICsxNDgsNyBAQCBKU1ZhbHVlICpKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KEV4CiAgICAgICAgICAgICBqZG91YmxlIHZhbHVlOwogICAgICAgICAgICAganZhbHVlIHJlc3Vs
dCA9IGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCAiZ2V0RG91Ymxl
IiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKICAgICAgICAgICAgIHZh
bHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKChkb3VibGUp
dmFsdWUpOworICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCAoZG91YmxlKXZh
bHVlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTE3
OSw3ICsxNzksNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwog
ICAgICAgICAgICAgICAgIGFyZ3NbMV0gPSBqYXZhVmFsdWU7Ci0gICAgICAgICAgICAgICAgZGlz
cGF0Y2hKTklDYWxsKHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwg
ZmFsc2UsIHZvaWRfdHlwZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+
bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgdm9pZF90eXBlLCBtaWQsIGFy
Z3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlm
IChleGNlcHRpb25EZXNjcmlwdGlvbikKICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0cmluZyhleGVjKSk7
CiAgICAgICAgICAgICB9CkBAIC00NzIsNyArNDcyLDcgQEAgSlNWYWx1ZSAqSmF2YUFycmF5Ojp2
YWx1ZUF0KEV4ZWNTdGF0ZSAqZQogICAgICAgICAgICAgICAgIHJldHVybiBKYXZhQXJyYXk6OmNv
bnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCBhbk9iamVjdCwgX3R5cGUrMSwgcm9vdE9iamVjdCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIG9yIGFycmF5IG9mIG90aGVyIG9iamVj
dCB0eXBlPwotICAgICAgICAgICAgcmV0dXJuIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0
KEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0LCByb290T2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgIHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCBKYXZhSW5zdGFu
Y2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewpAQCAtNDg2LDE0ICs0ODYsMTQgQEAg
SlNWYWx1ZSAqSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZQogICAgICAgICAgICAgamJ5
dGVBcnJheSBieXRlQXJyYXkgPSAoamJ5dGVBcnJheSlqYXZhQXJyYXkoKTsKICAgICAgICAgICAg
IGpieXRlIGFCeXRlOwogICAgICAgICAgICAgZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFy
cmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhQnl0
ZSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUJ5dGUpOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKICAgICAgICAgICAgIGpj
aGFyQXJyYXkgY2hhckFycmF5ID0gKGpjaGFyQXJyYXkpamF2YUFycmF5KCk7CiAgICAgICAgICAg
ICBqY2hhciBhQ2hhcjsKICAgICAgICAgICAgIGVudi0+R2V0Q2hhckFycmF5UmVnaW9uKGNoYXJB
cnJheSwgaW5kZXgsIDEsICZhQ2hhcik7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYUNo
YXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFDaGFyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUwMSwzNSArNTAxLDM1IEBA
IEpTVmFsdWUgKkphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUgKmUKICAgICAgICAgICAgIGpz
aG9ydEFycmF5IHNob3J0QXJyYXkgPSAoanNob3J0QXJyYXkpamF2YUFycmF5KCk7CiAgICAgICAg
ICAgICBqc2hvcnQgYVNob3J0OwogICAgICAgICAgICAgZW52LT5HZXRTaG9ydEFycmF5UmVnaW9u
KHNob3J0QXJyYXksIGluZGV4LCAxLCAmYVNob3J0KTsKLSAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihhU2hvcnQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFTaG9ydCk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIGludF90eXBlOiB7CiAgICAg
ICAgICAgICBqaW50QXJyYXkgaW50QXJyYXkgPSAoamludEFycmF5KWphdmFBcnJheSgpOwogICAg
ICAgICAgICAgamludCBhbkludDsKICAgICAgICAgICAgIGVudi0+R2V0SW50QXJyYXlSZWdpb24o
aW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGFuSW50KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhbkludCk7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIGxvbmdfdHlwZTogewogICAgICAgICAg
ICAgamxvbmdBcnJheSBsb25nQXJyYXkgPSAoamxvbmdBcnJheSlqYXZhQXJyYXkoKTsKICAgICAg
ICAgICAgIGpsb25nIGFMb25nOwogICAgICAgICAgICAgZW52LT5HZXRMb25nQXJyYXlSZWdpb24o
bG9uZ0FycmF5LCBpbmRleCwgMSwgJmFMb25nKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJl
cihhTG9uZyk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUxvbmcpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7CiAgICAgICAg
ICAgICBqZmxvYXRBcnJheSBmbG9hdEFycmF5ID0gKGpmbG9hdEFycmF5KWphdmFBcnJheSgpOwog
ICAgICAgICAgICAgamZsb2F0IGFGbG9hdDsKICAgICAgICAgICAgIGVudi0+R2V0RmxvYXRBcnJh
eVJlZ2lvbihmbG9hdEFycmF5LCBpbmRleCwgMSwgJmFGbG9hdCk7Ci0gICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIoYUZsb2F0KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBh
RmxvYXQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBkb3VibGVfdHlw
ZTogewogICAgICAgICAgICAgamRvdWJsZUFycmF5IGRvdWJsZUFycmF5ID0gKGpkb3VibGVBcnJh
eSlqYXZhQXJyYXkoKTsKICAgICAgICAgICAgIGpkb3VibGUgYURvdWJsZTsKICAgICAgICAgICAg
IGVudi0+R2V0RG91YmxlQXJyYXlSZWdpb24oZG91YmxlQXJyYXksIGluZGV4LCAxLCAmYURvdWJs
ZSk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYURvdWJsZSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgYURvdWJsZSk7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuaAkocmV2aXNp
b24gMzI3NTcpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIFQgY2FsbEpOSVN0YXRpY01ldGhvZChqY2xhc3MgY2xz
LCBjb25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotYm9vbCBkaXNwYXRjaEpOSUNh
bGwoY29uc3Qgdm9pZCAqdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0
aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3Ms
IGp2YWx1ZSAmcmVzdWx0LCBjb25zdCBjaGFyICpjYWxsaW5nVVJMLCBKU1ZhbHVlIComZXhjZXB0
aW9uRGVzY3JpcHRpb24pOworYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgY29uc3Qg
dm9pZCogdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5
cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSYg
cmVzdWx0LCBjb25zdCBjaGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGVzY3Jp
cHRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfY2xhc3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19jbGFzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE0ICsyNDQsMTQgQEAgRmllbGQqIE9i
amNDbGFzczo6ZmllbGROYW1lZChjb25zdCBJZGVudAogICAgIHJldHVybiBhRmllbGQ7CiB9CiAK
LUpTVmFsdWUqIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSW5zdGFuY2Uq
IGluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlKiBPYmpj
Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSW5zdGFuY2UqIGluc3RhbmNl
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCiB7CiAgICAgT2JqY0luc3RhbmNlKiBv
YmpjSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSk7CiAgICAg
aWQgdGFyZ2V0T2JqZWN0ID0gb2JqY0luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICAKICAgICBp
ZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnZva2VVbmRl
ZmluZWRNZXRob2RGcm9tV2ViU2NyaXB0OndpdGhBcmd1bWVudHM6KV0pCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBuZXcgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKG9i
amNJbnN0YW5jZSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBPYmpjRmFs
bGJhY2tPYmplY3RJbXAob2JqY0luc3RhbmNlLCBwcm9wZXJ0eU5hbWUpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCAr
NDYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25z
dDsKICAgICAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlICp2YWx1ZU9mKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBKU1ZhbHVlICpkZWZhdWx0VmFsdWUoSlNUeXBlIGhpbnQpIGNvbnN0OworICAgIHZp
cnR1YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBKU1R5cGUgaGludCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKICAgICAKQEAgLTYxLDkgKzYx
LDkgQEAgcHVibGljOgogCiAgICAgT2JqZWN0U3RydWN0UHRyIGdldE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIF9pbnN0YW5jZS5nZXQoKTsgfQogICAgIAotICAgIEpTVmFsdWUgKnN0cmluZ1ZhbHVl
KCkgY29uc3Q7Ci0gICAgSlNWYWx1ZSAqbnVtYmVyVmFsdWUoKSBjb25zdDsKLSAgICBKU1ZhbHVl
ICpib29sZWFuVmFsdWUoKSBjb25zdDsKKyAgICBKU1ZhbHVlKiBzdHJpbmdWYWx1ZShFeGVjU3Rh
dGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlKiBudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICBKU1ZhbHVlKiBib29sZWFuVmFsdWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgQmluZGlu
Z0xhbmd1YWdlIGdldEJpbmRpbmdMYW5ndWFnZSgpIGNvbnN0IHsgcmV0dXJuIE9iamVjdGl2ZUNM
YW5ndWFnZTsgfQogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZp
c2lvbiAzMjc1NykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDM0ICszMDgsMzQgQEAgSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpn
ZXRWYWx1ZU9mVW5kZWZpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE9iamNJ
bnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTVHlwZSBoaW50KSBjb25zdAorSlNWYWx1ZSogT2JqY0lu
c3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGUgaGludCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGhpbnQpIHsKICAgICBjYXNlIFN0cmluZ1R5cGU6Ci0gICAgICAgIHJl
dHVybiBzdHJpbmdWYWx1ZSgpOworICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiAg
ICAgY2FzZSBOdW1iZXJUeXBlOgotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKGV4ZWMpOwogICAgIGNhc2UgQm9vbGVhblR5cGU6CiAgICAg
ICAgIHJldHVybiBib29sZWFuVmFsdWUoKTsKICAgICBjYXNlIFVuc3BlY2lmaWVkVHlwZToKICAg
ICAgICAgaWYgKFtfaW5zdGFuY2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoW19pbnN0YW5jZS5nZXQoKSBpc0tpbmRP
ZkNsYXNzOltOU051bWJlciBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuIG51bWJlclZhbHVl
KCk7CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUoZXhlYyk7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2YoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7
CiAgICAgfQogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKCkgY29uc3QK
K0pTVmFsdWUqIE9iamNJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewotICAgIHJldHVybiBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhbZ2V0T2JqZWN0KCkgZGVz
Y3JpcHRpb25dKTsKKyAgICByZXR1cm4gY29udmVydE5TU3RyaW5nVG9TdHJpbmcoZXhlYywgW2dl
dE9iamVjdCgpIGRlc2NyaXB0aW9uXSk7CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6bnVt
YmVyVmFsdWUoKSBjb25zdAorSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5n
IHNlbnNpYmxlCi0gICAgcmV0dXJuIGpzTnVtYmVyKDApOworICAgIHJldHVybiBqc051bWJlcihl
eGVjLCAwKTsKIH0KIAogSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25z
dApAQCAtMzQ0LDcgKzM0NCw3IEBAIEpTVmFsdWUqIE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVl
KCkgY28KICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIH0KIAotSlNWYWx1ZSogT2JqY0lu
c3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCitKU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OnZhbHVlT2Yo
RXhlY1N0YXRlKiBleGVjKSBjb25zdCAKIHsKLSAgICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKKyAg
ICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191
dGlsaXR5LmgJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0
aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB0eXBlZGVmIGVudW0gewog
Y2xhc3MgUm9vdE9iamVjdDsKIAogT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSAqdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSk7Ci1KU1Zh
bHVlICpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJpbmcpOworSlNWYWx1
ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNz
dHJpbmcpOwogSlNWYWx1ZSAqY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlICpleGVj
LCB2b2lkICpidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9vdE9iamVjdCopOwogT2JqY1Zh
bHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZShjb25zdCBjaGFyICp0eXBlKTsKIApJbmRleDog
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHJldmlzaW9uIDMyNzU3KQorKysgV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsx
OTMsNyBAQCBPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSAqY29udmVydE5TU3RyaW5nVG9TdHJpbmcoTlNTdHJp
bmcgKm5zc3RyaW5nKQorSlNWYWx1ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7CiAgICAgSlNMb2NrIGxvY2s7CiAgICAgCkBA
IC0yMDIsNyArMjAyLDcgQEAgSlNWYWx1ZSAqY29udmVydE5TU3RyaW5nVG9TdHJpbmcoTlNTdHJp
bgogICAgIGNoYXJzID0gKHVuaWNoYXIgKiltYWxsb2Moc2l6ZW9mKHVuaWNoYXIpKmxlbmd0aCk7
CiAgICAgW25zc3RyaW5nIGdldENoYXJhY3RlcnM6Y2hhcnNdOwogICAgIFVTdHJpbmcgdSgoY29u
c3QgVUNoYXIqKWNoYXJzLCBsZW5ndGgpOwotICAgIEpTVmFsdWUgKmFWYWx1ZSA9IGpzU3RyaW5n
KHUpOworICAgIEpTVmFsdWUqIGFWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHUpOwogICAgIGZyZWUo
KHZvaWQgKiljaGFycyk7CiAgICAgcmV0dXJuIGFWYWx1ZTsKIH0KQEAgLTIzMyw3ICsyMzMsNyBA
QCBKU1ZhbHVlKiBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhCiAgICAgICAgIGNhc2Ug
T2JqY09iamVjdFR5cGU6IHsKICAgICAgICAgICAgIGlkIG9iaiA9ICooaWQqKWJ1ZmZlcjsKICAg
ICAgICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKChOU1N0cmluZyAqKW9i
aik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKGV4ZWMs
IChOU1N0cmluZyAqKW9iaik7CiAgICAgICAgICAgICBpZiAoW29iaiBpc0tpbmRPZkNsYXNzOndl
YlVuZGVmaW5lZENsYXNzKCldKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICAgICAgaWYgKChDRkJvb2xlYW5SZWYpb2JqID09IGtDRkJvb2xlYW5UcnVlKQpA
QCAtMjQxLDkgKzI0MSw5IEBAIEpTVmFsdWUqIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNT
dGEKICAgICAgICAgICAgIGlmICgoQ0ZCb29sZWFuUmVmKW9iaiA9PSBrQ0ZCb29sZWFuRmFsc2Up
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAgICAgICBp
ZiAoW29iaiBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQotICAgICAgICAgICAgICAg
IHJldHVybiBqc051bWJlcihbb2JqIGRvdWJsZVZhbHVlXSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIFtvYmogZG91YmxlVmFsdWVdKTsKICAgICAgICAgICAgIGlmIChb
b2JqIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IFJ1bnRpbWVBcnJheShleGVjLCBuZXcgT2JqY0FycmF5KG9iaiwgcm9vdE9iamVjdCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBu
ZXcgT2JqY0FycmF5KG9iaiwgcm9vdE9iamVjdCkpOwogICAgICAgICAgICAgaWYgKFtvYmogaXNL
aW5kT2ZDbGFzczp3ZWJTY3JpcHRPYmplY3RDbGFzcygpXSkgewogICAgICAgICAgICAgICAgIEpT
T2JqZWN0KiBpbXAgPSBbb2JqIF9pbXBdOwogICAgICAgICAgICAgICAgIHJldHVybiBpbXAgPyBp
bXAgOiBqc1VuZGVmaW5lZCgpOwpAQCAtMjUyLDMyICsyNTIsMzIgQEAgSlNWYWx1ZSogY29udmVy
dE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YQogICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwo
KTsKICAgICAgICAgICAgIGlmIChvYmogPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9i
amVjdChPYmpjSW5zdGFuY2U6OmNyZWF0ZShvYmosIHJvb3RPYmplY3QpKTsKKyAgICAgICAgICAg
IHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCBPYmpjSW5zdGFuY2U6
OmNyZWF0ZShvYmosIHJvb3RPYmplY3QpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIE9iamND
aGFyVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKGNoYXIgKilidWZmZXIpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsICooY2hhciopYnVmZmVyKTsKICAgICAg
ICAgY2FzZSBPYmpjVW5zaWduZWRDaGFyVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJl
cigqKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsICoodW5zaWduZWQgY2hhciopYnVmZmVyKTsKICAgICAgICAgY2FzZSBPYmpjU2hvcnRU
eXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCooc2hvcnQgKilidWZmZXIpOworICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsICooc2hvcnQqKWJ1ZmZlcik7CiAgICAgICAg
IGNhc2UgT2JqY1Vuc2lnbmVkU2hvcnRUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KCoodW5zaWduZWQgc2hvcnQgKilidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsICoodW5zaWduZWQgc2hvcnQqKWJ1ZmZlcik7CiAgICAgICAgIGNhc2UgT2JqY0ludFR5
cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKihpbnQgKilidWZmZXIpOworICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsICooaW50KilidWZmZXIpOwogICAgICAgICBjYXNl
IE9iamNVbnNpZ25lZEludFR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKih1bnNp
Z25lZCBpbnQgKilidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsICoo
dW5zaWduZWQgaW50KilidWZmZXIpOwogICAgICAgICBjYXNlIE9iamNMb25nVHlwZToKLSAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcigqKGxvbmcgKilidWZmZXIpOworICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsICoobG9uZyopYnVmZmVyKTsKICAgICAgICAgY2FzZSBPYmpjVW5z
aWduZWRMb25nVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKHVuc2lnbmVkIGxv
bmcgKilidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsICoodW5zaWdu
ZWQgbG9uZyopYnVmZmVyKTsKICAgICAgICAgY2FzZSBPYmpjTG9uZ0xvbmdUeXBlOgotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKCoobG9uZyBsb25nICopYnVmZmVyKTsKKyAgICAgICAgICAg
IHJldHVybiBqc051bWJlcihleGVjLCAqKGxvbmcgbG9uZyopYnVmZmVyKTsKICAgICAgICAgY2Fz
ZSBPYmpjVW5zaWduZWRMb25nTG9uZ1R5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
Kih1bnNpZ25lZCBsb25nIGxvbmcgKilidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsICoodW5zaWduZWQgbG9uZyBsb25nKilidWZmZXIpOwogICAgICAgICBjYXNlIE9i
amNGbG9hdFR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKihmbG9hdCAqKWJ1ZmZl
cik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgKihmbG9hdCopYnVmZmVyKTsK
ICAgICAgICAgY2FzZSBPYmpjRG91YmxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJl
cigqKGRvdWJsZSAqKWJ1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
Kihkb3VibGUqKWJ1ZmZlcik7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBTaG91
bGQgbmV2ZXIgZ2V0IGhlcmUuIEFyZ3VtZW50IHR5cGVzIGFyZSBmaWx0ZXJlZC4KICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGludmFsaWQgdHlwZSAoJWQpXG4iLCBfX1BSRVRUWV9G
VU5DVElPTl9fLCAoaW50KXR5cGUpOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNp
b24gMzI3NTcpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlv
bigpICAgCiAgICAgICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50Lgog
ICAgIAogICAgICAgICBpZiAod3JhcHBlcikKLSAgICAgICAgICAgIEtKUzo6Q29sbGVjdG9yOjpy
ZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZVRleHQuc2l6ZSgpICogMik7CisgICAgICAg
ICAgICBLSlM6OkhlYXA6OnRocmVhZEhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVz
cG9uc2VUZXh0LnNpemUoKSAqIDIpOwogICAgIH0KIAogICAgIGRlcmVmKCk7CkluZGV4OiBXZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gMzI3NTcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI3IEBACisyMDA4LTA1LTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MjYKKyAgICAgICAgTWFr
ZSBKYXZhU2NyaXB0IGhlYXAgcGVyLXRocmVhZAorCisgICAgICAgICogTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5oOgorICAgICAgICBSZW1vdmVkIGdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVj
dHNPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZywgYmVjYXVzZSBoZWFwcyBhcmUgbm93Cisg
ICAgICAgIHBlci10aHJlYWQsIGFuZCBvbmx5IHRoZSBvd25lciB0aHJlYWQgY2FuIGFjY2VzcyBh
IGhlYXAuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudF0p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFs
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQ
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgIFJlcGxhY2VkIHN0
YXRpYyBDb2xsZWN0b3IgY2FsbHMgd2l0aCBjYWxscyB0byBhIGN1cnJlbnQgdGhyZWFkJ3MgaW5z
dGFuY2UuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06Cisg
ICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAg
ICAgUGFzcyBFeGVjU3RhdGUgdG8ganNTdHJpbmcoKS4KKwogMjAwOC0wNC0zMCAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0u
CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAkocmV2aXNpb24gMzI3NTcpCisr
KyBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNiBAQAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iamVj
dFR5cGVDb3VudHM7CiAKICsgKHZvaWQpZ2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0czsK
LSsgKHZvaWQpZ2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFk
Rm9yRGVidWdnaW5nOihCT09MKXdhaXRVbnRpbERvbmU7CiAKICsgKHNpemVfdClpY29uUGFnZVVS
TE1hcHBpbmdDb3VudDsKICsgKHNpemVfdClpY29uUmV0YWluZWRQYWdlVVJMQ291bnQ7CkluZGV4
OiBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAzMjc1NykKKysrIFdl
YktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAs
MjUgKzUwLDI1IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogKyAoc2l6ZV90KWphdmFTY3Jp
cHRPYmplY3RzQ291bnQKIHsKICAgICBKU0xvY2sgbG9jazsKLSAgICByZXR1cm4gQ29sbGVjdG9y
OjpzaXplKCk7CisgICAgcmV0dXJuIEhlYXA6OnRocmVhZEhlYXAoKS0+c2l6ZSgpOwogfQogCiAr
IChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudAogewogICAgIEpTTG9jayBsb2Nr
OwotICAgIHJldHVybiBDb2xsZWN0b3I6Omdsb2JhbE9iamVjdENvdW50KCk7CisgICAgcmV0dXJu
IEhlYXA6OnRocmVhZEhlYXAoKS0+Z2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90
KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQKIHsKICAgICBKU0xvY2sgbG9jazsKLSAg
ICByZXR1cm4gQ29sbGVjdG9yOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIHJldHVybiBI
ZWFwOjp0aHJlYWRIZWFwKCktPnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVf
dClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7CiAgICAgSlNMb2NrIGxv
Y2s7Ci0gICAgcmV0dXJuIENvbGxlY3Rvcjo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsK
KyAgICByZXR1cm4gSGVhcDo6dGhyZWFkSGVhcCgpLT5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3Vu
dCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cwpAQCAtNzcsNyArNzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICAK
ICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIAotICAgIE93
blB0cjxIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gPiBjb3VudHMoQ29sbGVjdG9yOjpwcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxIYXNoQ291bnRlZFNldDxjb25z
dCBjaGFyKj4gPiBjb3VudHMoSGVhcDo6dGhyZWFkSGVhcCgpLT5wcm90ZWN0ZWRPYmplY3RUeXBl
Q291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5k
ID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6
aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKQEAgLTkxLDExICs5MSw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VD
b2xsZWN0Tm93KCk7CiB9CiAKLSsgKHZvaWQpZ2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0
c09uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nOihCT09MKXdhaXRVbnRpbERvbmU7Ci17Ci0g
ICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVn
Z2luZyh3YWl0VW50aWxEb25lKTsKLX0KLQogKyAoc2l6ZV90KWljb25QYWdlVVJMTWFwcGluZ0Nv
dW50CiB7CiAgICAgcmV0dXJuIGljb25EYXRhYmFzZSgpLT5wYWdlVVJMTWFwcGluZ0NvdW50KCk7
CkBAIC0xNTcsNyArMTUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiArIChzaXplX3Qp
amF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnQKIHsKICAgICBKU0xvY2sgbG9jazsKLSAg
ICByZXR1cm4gQ29sbGVjdG9yOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIHJldHVybiBI
ZWFwOjp0aHJlYWRIZWFwKCktPnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TU2V0
ICopamF2YVNjcmlwdFJvb3RPYmplY3RDbGFzc2VzCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjMxLDcgKzIzMSw3IEBAIE5TU3RyaW5nICogY29uc3QgV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmUK
ICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAgaWYgKGV2YWwpIHsKICAgICAgICAgTGlzdCBhcmdz
OwotICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhjb2RlKSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nKHN0YXRlLCBjb2RlKSk7CiAgICAgICAgIHJlc3VsdCA9IGV2YWwtPmNhbGwo
c3RhdGUsIDAsIGFyZ3MpOwogICAgIH0gZWxzZQogICAgICAgICAvLyBubyAiZXZhbCIsIG9yIG5v
IGNvbnRleHQgKGkuZS4gZ2xvYmFsIHNjb3BlKSAtIHVzZSBnbG9iYWwgZmFsbGJhY2sKSW5kZXg6
IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMjc1NykKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMDgtMDUtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgyNgorICAgICAg
ICBNYWtlIEphdmFTY3JpcHQgaGVhcCBwZXItdGhyZWFkCisKKyAgICAgICAgKiBXZWJKYXZhU2Ny
aXB0Q29sbGVjdG9yLmg6CisgICAgICAgICogSW50ZXJmYWNlcy9JV2ViSmF2YVNjcmlwdENvbGxl
Y3Rvci5pZGw6CisgICAgICAgIFJlcGxhY2VkIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCgpIHdp
dGggYSBkdW1teSBmdW5jdGlvbiwgYmVjYXVzZSBoZWFwcyBhcmUgbm93IHBlci10aHJlYWQsCisg
ICAgICAgIGFuZCBvbmx5IHRoZSBvd25lciB0aHJlYWQgY2FuIGFjY2VzcyBhIGhlYXAuIAorCisg
ICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6
OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0
YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAg
ICAqIFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViSmF2YVNjcmlwdENv
bGxlY3Rvcjo6cmVtb3ZlZCk6CisgICAgICAgIChXZWJKYXZhU2NyaXB0Q29sbGVjdG9yOjpvYmpl
Y3RDb3VudCk6CisgICAgICAgICogV2ViU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YlNjcmlwdENhbGxGcmFtZTo6dmFsdWVCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyk6
CisgICAgICAgIFJlcGxhY2VkIHN0YXRpYyBDb2xsZWN0b3IgY2FsbHMgd2l0aCBjYWxscyB0byBh
IGN1cnJlbnQgdGhyZWFkJ3MgaW5zdGFuY2UuIFBhc3MgRXhlY1N0YXRlIHRvIGpzU3RyaW5nKCku
CisKIDIwMDgtMDQtMjkgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
U3VwcG9ydCB0ZXh0IHNoYWRvdyBpbiBXZWJEcmF3VGV4dCgpLgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3Rh
dGlzdGljcy5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlz
dGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAg
ICAgSlNMb2NrIGxvY2s7Ci0gICAgKmNvdW50ID0gKFVJTlQpIENvbGxlY3Rvcjo6c2l6ZSgpOwor
ICAgICpjb3VudCA9IChVSU5UKUhlYXA6OnRocmVhZEhlYXAoKS0+c2l6ZSgpOwogICAgIHJldHVy
biBTX09LOwogfQogCkBAIC0xMDYsNyArMTA2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJDb3JlU3RhdGlzdAogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAgICAgSlNMb2Nr
IGxvY2s7Ci0gICAgKmNvdW50ID0gKFVJTlQpIENvbGxlY3Rvcjo6Z2xvYmFsT2JqZWN0Q291bnQo
KTsKKyAgICAqY291bnQgPSAoVUlOVClIZWFwOjp0aHJlYWRIZWFwKCktPmdsb2JhbE9iamVjdENv
dW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTExNyw3ICsxMTcsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CiAKICAgICBKU0xvY2sgbG9jazsKLSAgICAqY291bnQgPSAoVUlOVCkgQ29sbGVjdG9yOjpw
cm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgICpjb3VudCA9IChVSU5UKUhlYXA6OnRocmVhZEhl
YXAoKS0+cHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAt
MTI4LDcgKzEyOCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAogICAgIEpTTG9jayBsb2NrOwotICAgICpjb3Vu
dCA9IChVSU5UKSBDb2xsZWN0b3I6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CisgICAg
KmNvdW50ID0gKFVJTlQpSGVhcDo6dGhyZWFkSGVhcCgpLT5wcm90ZWN0ZWRHbG9iYWxPYmplY3RD
b3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4OiBXZWJLaXQvd2luL1dlYkphdmFT
Y3JpcHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViSmF2YVNjcmlw
dENvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViS2l0L3dpbi9XZWJKYXZhU2Ny
aXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTAgKzkzLDggQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJKYXZhU2NyaXB0QwogICAgIHJldHVybiBTX09LOwogfQog
Ci1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6OmNvbGxl
Y3RPbkFsdGVybmF0ZVRocmVhZCggCi0gICAgLyogW2luXSAqLyBCT09MIHdhaXRVbnRpbERvbmUp
CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6OnJlbW92
ZWQoKQogewotICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJl
YWRGb3JEZWJ1Z2dpbmcoISF3YWl0VW50aWxEb25lKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMTA4LDYgKzEwNiw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlw
dEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICAqY291bnQgPSAoVUlO
VClDb2xsZWN0b3I6OnNpemUoKTsKKyAgICAqY291bnQgPSAoVUlOVClIZWFwOjp0aHJlYWRIZWFw
KCktPnNpemUoKTsKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFdlYktpdC93aW4vV2ViSmF2
YVNjcmlwdENvbGxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViSmF2YVNjcmlw
dENvbGxlY3Rvci5oCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYktpdC93aW4vV2ViSmF2YVNjcmlw
dENvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw3IEBAIHB1YmxpYzoKICAg
ICAvLyBJV2ViSmF2YVNjcmlwdENvbGxlY3RvcgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBjb2xsZWN0KCk7CiAgICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCggCi0gICAgICAgIC8qIFtpbl0gKi8g
Qk9PTCB3YWl0VW50aWxEb25lKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgcmVtb3ZlZCgpOwogCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIG9i
amVjdENvdW50KCAKICAgICAgICAgLyogW3JldGF2YWxdW291dF0gKi8gVUlOVCogY291bnQpOwpJ
bmRleDogV2ViS2l0L3dpbi9XZWJTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJL
aXQvd2luL1dlYlNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsy
NTgsNyBAQCBKU1ZhbHVlKiBXZWJTY3JpcHRDYWxsRnJhbWU6OnZhbHVlQnlFdmFsCiAgICAgSlNW
YWx1ZSogc2NyaXB0RXhlY3V0aW9uUmVzdWx0OwogICAgIGlmIChldmFsKSB7CiAgICAgICAgIExp
c3QgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoY29kZSkpOworICAgICAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhzdGF0ZSwgY29kZSkpOwogICAgICAgICBzY3JpcHRFeGVjdXRp
b25SZXN1bHQgPSBldmFsLT5jYWxsKHN0YXRlLCAwLCBhcmdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgLy8gbm8gImV2YWwiLCBvciBubyBjb250ZXh0IChpLmUuIGdsb2JhbCBzY29wZSkgLSB1c2Ug
Z2xvYmFsIGZhbGxiYWNrCkluZGV4OiBXZWJLaXQvd2luL0ludGVyZmFjZXMvSVdlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vSW50ZXJmYWNlcy9JV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvci5pZGwJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViS2l0L3dpbi9J
bnRlcmZhY2VzL0lXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNiBAQCBpbXBvcnQgIm9jaWRsLmlkbCI7CiBpbnRlcmZhY2UgSVdlYkphdmFTY3Jp
cHRDb2xsZWN0b3IgOiBJVW5rbm93bgogewogICAgIEhSRVNVTFQgY29sbGVjdCgpOwotICAgIEhS
RVNVTFQgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKFtpbl0gQk9PTCB3YWl0VW50aWxEb25lKTsK
KyAgICBIUkVTVUxUIHJlbW92ZWQoKTsKICAgICBIUkVTVUxUIG9iamVjdENvdW50KFtvdXQsIHJl
dHZhbF0gVUlOVCogY291bnQpOwogfQpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJL
aXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOC0w
NS0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4ODI2CisgICAgICAgIE1ha2UgSmF2YVNjcmlwdCBoZWFwIHBl
ci10aHJlYWQKKworICAgICAgICBSZW1vdmVkIHN1cHBvcnQgZm9yIGNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZCwgYmVjYXVzZSBoZWFwcyBhcmUgbm93IHBlci10aHJlYWQsIGFuZCBvbmx5CisgICAg
ICAgIHRoZSBvd25lciB0aHJlYWQgY2FuIGFjY2VzcyBhIGhlYXAuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoR0NDb250cm9sbGVyOjpzdGF0
aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9HQ0NvbnRyb2xsZXJHdGsuY3BwOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL21hYy9HQ0NvbnRyb2xsZXJNYWMubW06CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0dDQ29udHJvbGxlcldpbi5jcHA6CisKIDIwMDgtMDQtMjkgIEFkYW0g
Um9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlc3RvcmUgdGhlIGJlbG92ZWQg
Q09NUHRyOjpvcGVyYXRvciYKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxOCArNDksNiBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0Q2FsbGJhY2soSlNDb250CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxEb25lKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQogc3RhdGlj
IEpTVmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC05
OSw3ICs4Nyw2IEBAIEpTU3RhdGljRnVuY3Rpb24qIEdDQ29udHJvbGxlcjo6c3RhdGljRnUKIHsK
ICAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICAg
ICAgeyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJjb2xs
ZWN0T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6IFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCShyZXZpc2lvbiAzMjc1NykKKysr
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw2IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAt
IHBsYXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgp
IGNvbnN0OwotICAgIHZvaWQgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGls
RG9uZSkgY29uc3Q7CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291bnQoKSBjb25zdDsKIAogcHJp
dmF0ZToKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9HQ0NvbnRyb2xsZXJH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9HQ0Nv
bnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAzMjc1NykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9HQ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCAr
MzIsNiBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdCgpIGNvbnN0CiB7CiB9CiAKLXZvaWQg
R0NDb250cm9sbGVyOjpjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25l
KSBjb25zdAotewotfQotCiBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9HQ0NvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0dDQ29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMzI3NTcpCisrKyBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvR0NDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsNiBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdCgpIGNvbnN0
CiAgICAgW1dlYkNvcmVTdGF0aXN0aWNzIGdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNd
OwogfQogCi12b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wg
d2FpdFVudGlsRG9uZSkgY29uc3QKLXsKLSAgICBbV2ViQ29yZVN0YXRpc3RpY3MgZ2FyYmFnZUNv
bGxlY3RKYXZhU2NyaXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nOndhaXRV
bnRpbERvbmVdOwotfQotCiBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3Rz
Q291bnRdOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0dDQ29udHJvbGxl
cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0dD
Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDMyNzU3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0dDQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0
ICs0MCw2IEBAIHZvaWQgR0NDb250cm9sbGVyOjpjb2xsZWN0KCkgY29uc3QKICAgICBjb2xsZWN0
b3ItPmNvbGxlY3QoKTsKIH0KIAotdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElXZWJKYXZh
U2NyaXB0Q29sbGVjdG9yPiBjb2xsZWN0b3I7Ci0gICAgaWYgKEZBSUxFRCg6OkNvQ3JlYXRlSW5z
dGFuY2UoQ0xTSURfV2ViSmF2YVNjcmlwdENvbGxlY3RvciwgMCwgQ0xTQ1RYX0FMTCwgSUlEX0lX
ZWJKYXZhU2NyaXB0Q29sbGVjdG9yLCAodm9pZCoqKSZjb2xsZWN0b3IpKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGNvbGxlY3Rvci0+Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERv
bmUgPyBUUlVFIDogRkFMU0UpOwotfQotCiBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVj
dENvdW50KCkgY29uc3QKIHsKICAgICBDT01QdHI8SVdlYkphdmFTY3JpcHRDb2xsZWN0b3I+IGNv
bGxlY3RvcjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzU3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDUtMDEgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODgyNgorICAgICAgICBNYWtlIEphdmFTY3JpcHQgaGVhcCBwZXItdGhyZWFkCisKKyAg
ICAgICAgUmVtb3ZlZCB0aGUgb25seSB0ZXN0IHRoYXQgZXhlcmNpc2VkIEdDIG9uIGFsdGVybmF0
ZSB0aHJlYWQsIHNpbmNlIGEgdGhyZWFkJ3MgaGVhcCBjYW4gb25seQorICAgICAgICBiZSBhY2Nl
c3NlZCBmcm9tIHRoZSBvd25lciB0aHJlYWQgbm93LgorCisgICAgICAgICogZmFzdC9kb20vZ2Mt
OC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9kb20vZ2MtOC5odG1sOiBS
ZW1vdmVkLgorCiAyMDA4LTA0LTMwICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOaWtvbGFzLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2MtOC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2MtOC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDMyNzU3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2MtOC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMCwwIEBACi1UaGlzIHBhZ2UgdGVz
dHMgZm9yIGEgY3Jhc2ggd2hlbiBhY2Nlc3NpbmcgYSBjdXN0b20gcHJvcGVydHkgb24gYSBET00g
b2JqZWN0IGFmdGVyIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBoYXMgcnVuIG9uIGFuIGFsdGVybmF0
ZSB0aHJlYWQuCi0KLUlmIHRoZSB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhICdQQVNTJyBtZXNz
YWdlIGJlbG93LgotCi1QQVNTOiB5b3UgZGlkbid0IGNyYXNoCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9nYy04Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2Mt
OC5odG1sCShyZXZpc2lvbiAzMjc1NykKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2djLTguaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlw
dD4KLWZ1bmN0aW9uIHByaW50KG1lc3NhZ2UsIGNvbG9yKSAKLXsKLSAgICB2YXIgcGFyYWdyYXBo
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgcGFyYWdyYXBoLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKLSAgICBwYXJhZ3JhcGguc3R5
bGUuZm9udEZhbWlseSA9ICJtb25vc3BhY2UiOwotICAgIGlmIChjb2xvcikKLSAgICAgICAgcGFy
YWdyYXBoLnN0eWxlLmNvbG9yID0gY29sb3I7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJhZ3JhcGgpOwotfQotCi1mdW5jdGlvbiB0ZXN0KCkg
Ci17Ci0gICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAgcHJp
bnQoIkZBSUw6IFRoaXMgdGVzdCBjYW4gb25seSBydW4gZnJvbSBpbnNpZGUgRHVtcFJlbmRlclRy
ZWUuIiwgInJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKLSAgICAKLSAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm15Q3VzdG9tUHJvcGVydHkg
PSBuZXcgU3RyaW5nKCIxIik7Ci0gICAgbmV3IERhdGUoKTsgLy8gYWxsb2NhdGUgYW5vdGhlciBv
YmplY3QgdG8gY3JlYXRlIGhlYXAgZW50cm9weQotICAgIC8vIENvbGxlY3Rpbmcgb24gYSB0aW1l
b3V0IHNlZW1zIHRvIG1ha2UgdGhlIGNyYXNoIG1vcmUgcmVwcm9kdWNpYmxlIC0tIG5vdCBleGFj
dGx5IHN1cmUgd2h5Ci0gICAgc2V0VGltZW91dCgnR0NDb250cm9sbGVyLmNvbGxlY3RPbkFsdGVy
bmF0ZVRocmVhZCh0cnVlKTsnLCAwKTsKLSAgICBzZXRUaW1lb3V0KCdkb2N1bWVudC5ib2R5LnN0
eWxlLm15Q3VzdG9tUHJvcGVydHk7IHByaW50KCJQQVNTOiB5b3UgZGlkblwndCBjcmFzaCIpOyBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7JywgMSk7Ci0gICAgCi0gICAgLy8gZmFp
bC1zYWZlCi0gICAgc2V0VGltZW91dCgncHJpbnQoIkZBSUw6IFRlc3QgaHVuZyAtLSBiYWlsaW5n
IG91dCIpOyBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7JywgMik7Ci19Ci0KLTwv
c2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgotPHA+VGhpcyBwYWdl
IHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gYWNjZXNzaW5nIGEgY3VzdG9tIHByb3BlcnR5IG9uIGEg
RE9NIG9iamVjdCBhZnRlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKLSAgIGhhcyBydW4gb24gYW4g
YWx0ZXJuYXRlIHRocmVhZC48L3A+Ci08cD5JZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUg
YSAnUEFTUycgbWVzc2FnZSBiZWxvdy48L3A+Ci08aHI+Ci0KLTxkaXYgaWQ9J2NvbnNvbGUnPjwv
ZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+Cg==
</data>
<flag name="review"
          id="9149"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>